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 })

但是我如何传递改变后的值呢?

MVC 4 -将改变后的值从视图移交给控制器

如果您想获得一个值,并且您不想返回知道值名称的模型,您可以使用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");
}

在本例中,您只需要从表单

中发布IDDisplayName属性。
@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" />
}