【发布时间】:2015-10-14 22:15:47
【问题描述】:
我们必须在 Razor 视图中将多个属性组合到一个 EditorFor 字段中。
我们有属性 Quantity、UnitOfMeasure 和 Ingredient。这些需要结合起来,这样用户就可以只输入他或她需要的东西,即 10 公斤土豆,而不是在多个字段中输入信息。
完成后,我们还需要对 UOM 和成分属性进行自动填充。
我为此代码创建了一个局部视图。
@model IEnumerable<RecipeApplication.Models.RecipeLine>
<div class="form-group">
@Html.Label("Ingrediënten", htmlAttributes: new { @class = "control-label col-md-2" })
<div>
@foreach (var item in Model)
{
<p>
@Html.EditorFor(modelItem => item.Quantity, new { htmlAttributes = new { @class = "form-control-inline" } })
@Html.EditorFor(modelItem => item.UnitOfMeasure.Abbreviation, new { htmlAttributes = new { @class = "form-control-inline" } })
@Html.EditorFor(modelItem => item.Ingredient.Name, new { htmlAttributes = new { @class = "form-control-inline" } })
</p>
}
</div>
</div>
显然这不是本意。
这是编辑功能的代码:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
RecipeModel recipeModel = db.Recipes.Find(id);
if (recipeModel == null)
{
return HttpNotFound();
}
GetRecipeLines(id);
return View(recipeModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Name,Description,ImageUrl")] RecipeModel recipeModel, int?id)
{
if (ModelState.IsValid)
{
db.Entry(recipeModel).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
GetRecipeLines(id);
return View(recipeModel);
}
我查看了 Google 和 StackOverflow,但找不到正确的答案来完成这项工作。
就我个人而言,此刻我什至不知道从哪里开始。
我希望有人可以帮助解决这个问题。
谢谢。
【问题讨论】:
-
向您的模型添加一个字符串字段,该字段接受输入并在您的控制器中对其进行解析。在一个字符串中输入多个模型值没有标准控件。
-
@D Stanley 我会使用自定义模型绑定器来完成类似的事情,而不是向模型中添加一个字段,该字段只是为了解析而存在,在绑定器中获取它,在那里解析它,然后按照预期填充模型。
标签: c# asp.net-mvc asp.net-mvc-4 razor properties