2

さまざまな場所から呼び出すことができるBarEditor.ascxがあります。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Bar>" %>
<%= Html.TextBox("a") %>
...

ここで、1ページで2つのオブジェクトを編集する必要があると考えてください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>

h番目

于 2010-01-20T12:23:19.967 に答える
0

ユーザー コントロールを呼び出すときに、ViewData で文字列 ("baz" または "bar" など) を渡します。渡されたテキストから html.textbox の名前を取得し、渡された値から値を取得します。

于 2009-06-05T12:42:51.630 に答える
-2

ASP.NetMVCでのモデルマッピングについて学習する必要があります。asp.net mvcページ内のすべてがhtmlコントロールにレンダリングされるため、<%Html.RenderPartial( "BarEditor"、ViewData ["bar"]);のコントロールを区別しません。%>および<%Html.RenderPartial( "BarEditor"、ViewData ["baz"]); %>

于 2009-12-21T04:26:54.760 に答える