模型:
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
}
控制器:
public class HomeController : Controller
{
[HttpGet]
public ViewResult ShowProduct()
{
return View(new Product());
}
[HttpPost]
public ViewResult ShowProduct(Product product)
{
product.ProductId = 100;
product.Name = "Test";
return View(product);
}
}
看法:
@model HelperMethods.Models.Product
@using (Html.BeginForm("ShowProduct", "Home"))
{
@Html.TextBoxFor(model => model.ProductId);
@Html.TextBoxFor(model => model.Name);
<input type="submit" value="Save" class="btn btn-default" />
}
这个例子很简单,我创建了一个空表单。用户输入数据,例如一些文本,然后将表单提交给服务器。控制器从表单接收模型,将输入的数据改回并显示此表单。这些只是线条
product.ProductId = 100;
product.Name = "Test";
它们没有任何作用,表单不关心用户输入的内容。为什么会这样?以及如何绕过它?
问题是该模型存在于 ModelState 字典中,如果您不从中删除要更改的模型字段,则不会有任何效果。比方说:
之后,Id 中的更改将可见,但最好返回一个属性已更改的新模型对象,或者执行以下操作: