我正在使用MVC 2和EF4。我有一个显示我的应用程序(类)属性的视图。并非所有属性都显示在视图中。单击提交按钮后,需要设置一些属性。
我正在通过客户端验证,但我的服务器验证仍然失败。我在Application
操作中收到了CreateApplication
个对象,我更新了一个属性,并进行了ModelState.IsValid
检查。它仍然是假的。我在错误列表中循环,它使用Required数据注释显示我在SubmitterEmployeeNumber
属性上设置的错误文本。我确实设置了它并且我确实更新了我的模型,但验证仍然失败。这是我的代码:
[HttpPost]
public ActionResult CreateApplication(Application application)
{
application.SubmitterEmployeeNumber = "123456";
TryUpdateModel(application);
if (ModelState.IsValid)
{
}
}
以下是我显示视图的方式:
public ActionResult CreateApplication()
{
var viewModel = new ApplicationViewModel(new Application(), db.AccountTypes);
return View(viewModel);
}
如何在绑定后设置属性后才能通过验证?
UpdateModel
和TryUpdateModel
之间有什么区别?我什么时候需要使用它们?
编辑:
我将操作的名称更改为:
[HttpPost]
public ActionResult CreateApp()
{
var application = new Application
{
ApplicationStateID = 1,
SubmitterEmployeeNumber = "123456"
};
if (TryUpdateModel(application))
{
int success = 0;
}
}
以下是我的观点:
<% using (Html.BeginForm("CreateApp", "Application")) {%>
TryUpdateModel
仍然验证为false。我放入int success = 0;
只是为了看它是否会进入它但它没有。
答案 0 :(得分:1)
[HttpPost]
public ActionResult CreateApplication()
{
var application = new Application
{
SubmitterEmployeeNumber = "123456"
};
if (TryUpdateModel(application))
{
// The model is valid => submit values to the database
return RedirectToAction("Success");
}
return View(application);
}
更新:由于评论部分中的许多混淆,这里有一个完整的工作示例。
型号:
public class Application
{
[Required]
public int? ApplicationStateID { get; set; }
[Required]
public string SubmitterEmployeeNumber { get; set; }
[Required]
public string Foo { get; set; }
[Required]
public string Bar { get; set; }
}
控制器:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
var application = new Application();
return View(application);
}
[HttpPost]
[ActionName("Index")]
public ActionResult Create()
{
var application = new Application
{
ApplicationStateID = 1,
SubmitterEmployeeNumber = "123456"
};
if (TryUpdateModel(application))
{
// success => update database, etc...
return Content("yupee");
}
// failure => redisplay view to fix errors
return View(application);
}
}
查看:
<% using (Html.BeginForm()) { %>
<div>
<%: Html.LabelFor(x => x.Foo) %>
<%: Html.TextBoxFor(x => x.Foo) %>
<%: Html.ValidationMessageFor(x => x.Foo) %>
</div>
<div>
<%: Html.LabelFor(x => x.Bar) %>
<%: Html.TextBoxFor(x => x.Bar) %>
<%: Html.ValidationMessageFor(x => x.Bar) %>
</div>
<input type="submit" value="GO GO" />
<% } %>
希望这可以解决问题。