TryUpdateModel在属性值更改后不更新对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TryUpdateModel在属性值更改后不更新对象相关的知识,希望对你有一定的参考价值。
我正在使用MVC 2和EF4。我有一个显示我的应用程序(类)属性的视图。并非所有属性都显示在视图中。单击提交按钮后,需要设置一些属性。
我正在通过客户端验证,但我的服务器验证仍然失败。我在Application
动作中收到一个CreateApplication
对象,我更新了一个属性,然后进行ModelState.IsValid
检查。它仍然是假的。我在错误列表中循环,它显示我使用必需数据注释在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
仍然被证实为假。我放入int success = 0;
只是为了看它是否会进入它,但事实并非如此。
答案
[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" />
<% } %>
希望这可以解决问题。
以上是关于TryUpdateModel在属性值更改后不更新对象的主要内容,如果未能解决你的问题,请参考以下文章