MVC 4 -将改变后的值从视图移交给控制器
本文关键字:视图 控制器 改变 MVC | 更新日期: 2023-09-27 18:15:33
如果一个视图只允许编辑一个属性,但所有其他属性都被显示(DisplayFor,非可编辑的),什么是一个好方法来设计改变的值移交给控制器?
现在我有隐藏输入字段的所有属性显示与DisplayFor和控制器获得完整的对象传递。
这是相当低效的,我知道它只会张贴该对象的ID和更改后的值。
用户可以像这样输入要修改的值:
@Html.EditorFor(model => model.Verkaufspreis)
@Html.ValidationMessageFor(model => model.Verkaufspreis)
我可以像这样传递对象的ID
@Html.ActionLink("Edit", "Edit", new { id=Model.ID })
但是我如何传递改变后的值呢?
如果您想获得一个值,并且您不想返回知道值名称的模型,您可以使用FormCollection
[HttpPost]
public ActionResult (FormCollectio collection)
{
string Verkaufspreis1=collection["Verkaufspreis"].ToString();
}
MVC允许所有类型的绑定,例如你可以输入
[HttpPost]
public ActionResult (int ID, String Verkaufspreis)
//Have to be the same propery name as your model
{
//Get original object with the ID
//change the "Sell of Stock" field
}
这将动态传递ID和Verkaufspreis作为参数。
这将允许您只拥有需要更改的ID和值,因为您将在回发时从数据库(或任何地方)获得其余内容,仅更新必要的值。
您可以将整个模型作为参数,尽管这意味着如果您不将它们传递给客户端,则会有许多空值。
您可以这样做,而不是在表单中放置大量隐藏的输入。
只需将更改后的值和id发布给action方法。从数据源中读取完整的实体,更新新值并将其保存回来。
[HttpPost]
public ActionResult Update(CustomerViewModel model)
{
Customer customer=repositary.GetCustomerFromID(model.ID)
customer.DisplayName=model.DisplayName;
repositary.SaveCustomer(customer);
return RedirectToAction("ProfileUpdated");
}
在本例中,您只需要从表单
中发布ID
和DisplayName
属性。@model CustomerViewModel
<h2>Update Customer details</h2>
@using(Html.Beginform())
{
Display Name : @Html.TextBoxFor(x=>x.DisplayName)
@Html.HiddenFor(x=>x.ID)
<input type="submit" value="Save" />
}