我收到來自上級的指令,使用遠程驗證而不是RequiredIf屬性來檢查特定字段是否具有值能夠被用戶編輯。如果字段沒有值,則使用遠程驗證來檢查字段的值是否沒有觸發
現在,我的代碼看起來是這樣的 -
視圖模型
public class FooModel
{
// SNIP: Unimportant extra variables
public int? DeviceId;
public int? ProviderId;
[Remote("IsMessageRequired", "Foo",
AdditionalFields="DeviceId,CarrierId",
ErrorMessage="(required for other")]
public string MessageAddress { get;set; }
// SNIP: Unimportant other details
}
控制器
public class FooController
{
// SNIP: Unimportant details
public JsonResult IsMessageRequired(string messageAddress, int? device, int? carrier)
{
if(!string.IsNullOrEmpty(messageAddress))
return Json(true, JsonRequestBehavior.AllowGet);
// Conditions:
// A) Device = "Samsung"/Carrier = "Other"
// B) Device = "Other"
if(device = FooModel.GetDeviceIdByName("Samsung")
&& carrier = FooModel.GetProviderIdByName("Other")
{
return Json(! string.IsNullOrEmpty(pageAddress), JsonRequestBehavior.AllowGet);
}
if(device = FooModel.GetDeviceIdByName("Other"))
{
return Json(! string.IsNullOrEmpty(pageAddress), JsonRequestBehavior.AllowGet);
}
// Default condition occurs on first-run scenarios.
return Json(true, JsonRequestBehavior.AllowGet);
}
// SNIP: Other unimportant details
}
......最後,我查看:
@model FooProject.Models.FooModel
@Html.DropDownFor(x => x.DeviceId)
@Html.DropDownFor(x => x.ProviderId)
@Html.TextBoxFor(x => x.MessageAddress)
@Html.ValidationMessageFor(x => x.MessageAddress)
問題:驗證僅在輸入值時觸發,但從不在文本框不包含任何值時。遠程驗證僅在文本框中有值時才起作用?如果不是,我如何正確接近這個設置?
它只會在$ .trim返回一個值時觸發 - 所有非空和非空白值。 – Joe