C# 验证消息不存在';不在viewmodel中将模型显示为属性
我一直在努力处理asp.net中的模型验证消息 我有一个viewmodel使用的模型。 如果用户未填写必填字段,我希望视图显示验证错误 当必填字段未填充(预期行为)但我看不到时,My ModelState.IsValid为false 有错误消息吗 我的模型课:C# 验证消息不存在';不在viewmodel中将模型显示为属性,c#,asp.net-mvc,C#,Asp.net Mvc,我一直在努力处理asp.net中的模型验证消息 我有一个viewmodel使用的模型。 如果用户未填写必填字段,我希望视图显示验证错误 当必填字段未填充(预期行为)但我看不到时,My ModelState.IsValid为false 有错误消息吗 我的模型课: public class Model { [Required(ErrorMessage = "Name is required.")] public string Name { get; set; }
public class Model
{
[Required(ErrorMessage = "Name is required.")]
public string Name { get; set; }
[Required(ErrorMessage = "Adress is required.")]
public string Adress { get; set; }
}
我的ViewModel类:
public class ViewModel
{
[Required]
public Model SelectedModel { get; set; }
public string Title { get; set;}
}
我的控制器:
[HttpPost]
public ActionResult Create(ViewModel vm)
{
try
{
if (ModelState.IsValid)
{
bool result = *DatabaseStuff*
if(result == true)
{
return RedirectToAction("Index");
}
else
{
return View();
}
}
return RedirectToAction("Index",vm);
}
catch
{
return View();
}
}
我的看法
@model ViewModel
@using (Html.BeginForm("Create", "MyController", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="box box-primary">
<div class="box-header with-border">
<h4 class="box-title">ViewModel Form</h4>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-12">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedModel.Name, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.SelectedModel.Name, null, "SelectedModel_Name",new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SelectedModel.Name, "", new { @class = "text-danger", @data_valmsg_for = "SelectedModel_Name" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedModel.Adress, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.SelectedModel.Adress, null, "SelectedModel_Adress",new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SelectedModel.Adress, "", new { @class = "text-danger", @data_valmsg_for = "SelectedModel_Adress" })
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="box-footer">
<input type="submit" value="Create" class="btn btn-success pull-right" />
</div>
</div>
</div>
}
@model视图模型
@使用(Html.BeginForm(“Create”,“MyController”,FormMethod.Post))
{
@Html.AntiForgeryToken()
视图模型窗体
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@LabelFor(model=>model.Title,htmlAttributes:new{@class=“control label”})
@EditorFor(model=>model.Title,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Title,“,new{@class=“text danger”})
@LabelFor(model=>model.SelectedModel.Name,htmlAttributes:new{@class=“controllabel”})
@EditorFor(model=>model.SelectedModel.Name,null,“SelectedModel_Name”,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.SelectedModel.Name,”,new{@class=“text danger”,@data\u valmsg\u for=“SelectedModel\u Name”})
@LabelFor(model=>model.SelectedModel.address,htmlAttributes:new{@class=“control label”})
@EditorFor(model=>model.SelectedModel.address,null,“SelectedModel_-address”,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.SelectedModel.address,”,new{@class=“text danger”,@data\u valmsg\u for=“SelectedModel\u address”})
}
谢谢。我认为当ModelState无效时,您应该返回View
- 返回视图不会发出新的请求,它只是呈现视图 不更改浏览器地址栏中的URL
- Return RedirectToAction在浏览器的
地址栏由MVC用生成的URL更新
try { if (ModelState.IsValid) { bool result = *DatabaseStuff* if(result == true) { return RedirectToAction("Index"); } else { return View(); } } return View(); }