我有一个BarEditor.ascx,可以从不同的地方调用.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Bar>" %> <%= Html.TextBox("a") %> ...
现在考虑我需要在一页Edit.aspx上编辑两个对象
<form action="update"> <div> <% Html.RenderPartial("BarEditor",ViewData["bar"]); %> </div> <div> <% Html.RenderPartial("BarEditor",ViewData["baz"]); %> </div> <input type="submit" value="Submit" /> </form>
这提出:
a=1&a=2
我需要它:
bar.a=1&baz.a=2
所以我们可以用它来处理它
public ActionResult Update(Bar bar,Bar baz) { ... }
解决方法
只需为BarEditor创建一个viewmodel类,并将其强类型化为这个新类
例如
namespace viewmodel { public class BarEditor { string Prefix { get; set; } Models.Bar Bar { get; set; } } }
现在你像这样在BarEditor.ascx中创建文本框
<%= Html.TextBox(Model.Prefix + ".a") %>
并且在您看来,您包括BarEditor
<form action="update"> <div> <% Html.RenderPartial("BarEditor",new viewmodel.BarEditor { Prefix = "Bar",Bar = ViewData["bar"]}); %> </div> <div> <% Html.RenderPartial("BarEditor",new viewmodel.BarEditor { Prefix = "Baz",Bar = ViewData["baz"]}); %> </div> <input type="submit" value="Submit" /> </form>
心连心