2

如果一个视图只允许编辑一个属性但所有其他属性也被显示(DisplayFor,不可编辑),那么设计将更改的值移交给控制器的好方法是什么?

现在,我为使用 DisplayFor 显示的所有属性提供了隐藏输入字段,并且控制器获取了传递的完整对象。

这是非常低效的,我知道只发布该对象的 ID 和更改的值就足够了。

用户可以像这样输入要更改的值:

    @Html.EditorFor(model => model.Verkaufspreis)
    @Html.ValidationMessageFor(model => model.Verkaufspreis)

我可以像这样传递对象的 ID

    @Html.ActionLink("Edit", "Edit", new { id=Model.ID })

但是我将如何传递已更改的值?谢谢您的意见。

4

3 回答 3

2

如果您想获取一个值并且不想返回知道值名称的模型,您可以使用 FormCollection

[HttpPost]
public ActionResult (FormCollectio collection)
{

    string Verkaufspreis1=collection["Verkaufspreis"].ToString();

}
于 2013-05-26T23:01:42.097 回答
1

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 和需要更改的值,因为您将在回发时从数据库(或任何地方)获取其余部分,只更新必要的值。

您可以将整个模型作为参数,尽管这意味着如果您不将它们传递给客户端,您将有很多空值。

于 2013-05-26T23:22:17.403 回答
1

您可以这样做,而不是在表单中放置大量隐藏的输入。

只需将更改的值和 id 发布到操作方法。从您的数据源中读取完整的实体并更新新值并将其保存回来。

[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" />
}
于 2013-05-26T23:22:48.010 回答