MVC 4 - 将视图中的值更改为控制器

时间:2013-05-26 22:43:35

标签: c# asp.net-mvc

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

现在我为DisplayFor显示的所有属性都有隐藏输入字段,控制器获取传递的完整对象。

这几乎是无效的,我知道仅发布该对象的ID和更改后的值就足够了。

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

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

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

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

但是我如何传递已更改的值?感谢您的投入。

3 个答案:

答案 0 :(得分:2)

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

[HttpPost]
public ActionResult (FormCollectio collection)
{

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

}

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

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

答案 2 :(得分: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" />
}