如果某个视图只允许编辑一个属性,但同时显示所有其他属性(DisplayFor,不可编辑),那么设计将更改后的值转交给的方法是什么好方法控制器?
现在我为DisplayFor显示的所有属性都有隐藏输入字段,控制器获取传递的完整对象。
这几乎是无效的,我知道仅发布该对象的ID和更改后的值就足够了。
用户可以输入要更改的值:
@Html.EditorFor(model => model.Verkaufspreis)
@Html.ValidationMessageFor(model => model.Verkaufspreis)
我可以像这样传递对象的ID
@Html.ActionLink("Edit", "Edit", new { id=Model.ID })
但是我如何传递已更改的值?感谢您的投入。
答案 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");
}
在这种情况下,您只需要发布表单中的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" />
}