2

我有一个 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.ascx 的最佳方法是什么?

4

4 回答 4

2

只需为您的 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>

hth

于 2010-01-20T12:23:19.967 回答
0

在调用用户控件时,我会通过我的 ViewData 传递一个字符串(“baz”或“bar”等)。让 html.textbox 从传递的文本中获取其名称,并从传递的值中获取其值。

于 2009-06-05T12:42:51.630 回答
0

为什么不为视图创建一个模型?然后,您的视图需要是使用数据类 FormView 的强类型视图。

public class FormView
{
    string Bar {get; set;}
    string Baz {get; set;}
}

然后在您看来,您可以使用

<form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", Model.Bar); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", Model.Baz); %>
    </div>

    <input type="submit" value="Submit" />
</form>

你的控制器变成

public ActionResult Update(FormView MyForm)
{
    ... = MyForm.Bar;

    ... = MyForm.Baz;
}
于 2010-01-19T22:49:34.507 回答
-2

您应该了解 ASP.Net MVC 中的模型映射。asp.net mvc 页面中的所有内容都将呈现为 html 控件,因此不区分 <% Html.RenderPartial("BarEditor", ViewData["bar"]); 中的控件 %> 和 <% Html.RenderPartial("BarEditor", ViewData["baz"]); %>

于 2009-12-21T04:26:54.760 回答