1
假設我有一個例子實體:實體框架/ ASP MVC關係驗證:檢查密鑰或對象?
public class City
{
public int CityId { get; set; }
public string Name { get; set; }
public int StateId { get; set; }
public virtual State State{ get; set; }
}
有幾個在其中創建新城市的情況。 1)通過在一個視圖中的用戶,從現有狀態中選擇:
@Html.DropDownListFor(it => it.StateId, ViewBag.States)
2)中的情況下的後端,其中所述狀態可能是新的也:
State newState = context.States.Create();
newState.Name = "North Takoma";
City newCity = context.Cities.Create();
newCity.Name = "Springfield";
newCity.State = newState;
context.States.Attach(newState);
context.Cities.Attach(newCity);
context.SaveChanges();
是必需的狀態關係並且應該被驗證。問題是我們應該驗證StateID還是實際的國家關係對象? (使用FluentValidation這裏,但會使用數據註釋相當類似的情況)
public class CityValidator : AbstractValidator<City>
{
public CityValidator()
{
// this?
RuleFor(it => it.StateID).NotEmpty();
// or this?
RuleFor(it => it.State).NotNull();
}
}
在第一種情況下,STATEID將被填充,但不在狀態的對象;對於第二種情況反之亦然。
我可以把我的驗證器中的自定義邏輯來檢查一個或另一個;然而,在我看來,我失去了不顯眼的驗證屬性。任何好的,幹這個問題的解決方案?
編輯說明:在該示例中,可以通過設置StateID(對於現有狀態)或State屬性(對於新狀態)爲城市指定州。那麼如何設置驗證並在我的視圖中仍然可以獲得輸入中的「data-val-required」屬性?
是的,我走了那條路。但是,我不相信在規則集中使用.When擴展時,將會設置不顯眼的驗證屬性。 – enoshixi