单击“更新名称”按钮时,将调用UpdateDetails
操作,但所有属性的Customer
模型参数均为空。这是为什么?
控制器:
public class CustomerController : Controller
{
public ActionResult Index(int id)
{
Customer customer = GetCustomer(id);
return View(customer);
}
[HttpPost]
public PartialViewResult UpdateDetails(Customer customer)
{
UpdateCustomer(customer);
return PartialView("CustomerUpdateResult", true);
}
}
查看摘录
@model MvcTest.Models.Customer
@using (Ajax.BeginForm("UpdateDetails", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "CustomerUpdateResultDiv" }))
{
@Html.TextBoxFor(cust => cust.Name)
<input type="submit" value="Update Name" />
}
<div id="CustomerUpdateResultDiv"></div>
答案 0 :(得分:1)
上面的代码(有问题)应该可以正常运行,假设您没有任何其他代码劫持您的点击事件并执行其他操作。
但是你只会得到name属性值,因为你只有表单中的那个。所以其他所有属性都将为null。您可以做的是在表单中包含更多属性或再次读取客户对象,并在保存之前仅设置更新的属性值。
@using (Ajax.BeginForm("UpdateDetails", new AjaxOptions { HttpMethod = "POST",
UpdateTargetId = "CustomerUpdateResultDiv" }))
{
@Html.TextBoxFor(cust => cust.Name)
@Html.HiddenFor(c=>c.CustomerID)
<input type="submit" value="Update Name" />
}
在HttpPost操作中,使用CustomerID获取客户对象并更新相关的属性值。
[HttpPost]
public PartialViewResult UpdateDetails(Customer customer)
{
var existingCustomer = GetCustomer(id);
if(existingCustomer!=null)
{
existingCustomer.Name=customer.Name;
UpdateCustomer(existingCustomer);
return PartialView("CustomerUpdateResult", true);
}
return PartialView("CustomerNotFound", true);
}