每當有一些自定義驗證或模型狀態調整時,我必須依賴魔術字符串(反映屬性名稱)到目前爲止。當然,一定有更好的辦法。Mvc ModelState KeyFor屬性
說你有一個2提交按鈕的形式。您已通過添加必需屬性來設置驗證規則:
public class MyModel
{
[Required]
public string ValueOne { get; set; }
[Required]
public string ValueTwo { get; set; }
}
這將始終驗證這兩個字段。但是,假設我已經在上面模型的表單和編輯器中添加了兩個按鈕。按鈕一隻需要ValueOne,按鈕二隻需要ValueTwo。
Typically I would have custom validation code that checks which button was clicked and do something along the lines:
private void ValidateViewModel(MyModel viewModel)
{
foreach (var key in ModelState.Keys)
ModelState[key].Errors.Clear();
if (Request[{ButtonOneName}] != null && string.IsNullOrEmpty(viewModel.ValueOne))
ModelState.AddModelError("ValueOne", "Required");
else if (Request[{ButtonTwoName}] != null && string.IsNullOrEmpty(viewModel.ValueTwo))
ModelState.AddModelError("ValueTwo", "Required");
}
不是很漂亮,我知道但是...我的牛肉是魔法字符串「ValueOne」和「ValueTwo」。還有清除錯誤的方式。有沒有辦法生成這些密鑰?我在尋找類似:
ModelState.KeyFor<MyModel>(m => m.ValueOne)
然後邏輯延伸:
ModelState.Get<MyModel>(m => m.ValueOne)
在我開始重新發明輪子 - 是否有這樣的事情已經隱藏的地方?
在問你之前,我通常會定義靜態類SubmitActions,其中包含表示提交按鈕名稱的常量字符串。不,我不能將它分成多個形式,因爲視圖是呈現的。
感謝您的任何建議。
您是否曾經找到過解決方案? ModelState.KeyFor(m => m.ValueOne)將正是我所需要的類似的東西,我正在做... –
LDJ