我正在编写一个MVC 5互联网应用程序,并在视图中有关于验证的问题。
这是我的观看代码:
<div class="form-group">
@Html.LabelFor(model => model.asset.linkFromExternalResource, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div class="checkbox">
@Html.EditorFor(model => model.asset.linkFromExternalResource)
@Html.ValidationMessageFor(model => model.asset.linkFromExternalResource, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.asset.webAddress, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.asset.webAddress, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.asset.webAddress, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.fileId, "fileId", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("fileId", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.fileId, "", new { @class = "text-danger" })
</div>
</div>
如何编写代码以验证model.asset.webAddress
或model.fileId
,具体取决于是否选中model.asset.linkFromExternalResource
?
我会尝试更好地解释。如果用户选中了model.asset.linkFromExternalResource
复选框,则会验证model.asset.webAddress
值,但不会验证model.fileId
,如果未选中model.asset.linkFromExternalResource
复选框,则{{1不会验证值,但会验证model.asset.webAddress
。
我该如何应对这种情况?我是在视图中还是在控制器中编写此代码?
修改
我添加了model.fileId
,但收到以下错误:
[NotImplementedException:未实现方法或操作。]
在这行代码中:
MVC Foolproof Validation
不是使用await db.SaveChangesAsync();
,而是编写自己的自定义验证属性更容易吗?
EDIT2
我创建了一个testModel和一个控制器,但错误仍然存在。
这是我的模特:
MVC Foolproof Validation
这是控制器:
public class TestModel
{
[Key]
public int Id { get; set; }
[Required]
public string name { get; set; }
public bool testValue { get; set; }
[RequiredIfTrue("testValue")]
public string value1 { get; set; }
[RequiredIfFalse("testValue")]
public string value2 { get; set; }
}
这是错误:
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "Id,name,testValue,value1,value2")] TestModel testModel)
{
if (ModelState.IsValid)
{
db.testModels.Add(testModel);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(testModel);
}