2

ViewModelは次のようになります。

public W { get; set; }
public WC WC { get; set; }
public List<TC> TCs { get; set; }

WCには相関するTCのグループがあります。それらの関係は、外部キーを含むTCによってマップされますWCId

ビューでは、私はフォームを持っています。フォームには、WCの入力フィールドがあります。次に、最大4のカウントに応じてTCのグループがあります。各TCには、外部キーを持つTCに関連するTがありますTCId。フォームが投稿されたときに、TCに相関関係があることを確認しようとしていTIdます。はTId、WのTのリストに保持されます(つまり@Model.W.T.ElementAt(someindex).TId)。

ラムダ式をレバレッジして、ヘルパーを使用してビューでこのリレーションを生成し、相関コントローラーがhttppostアクションで使用できるようにするにはどうすればよいですか?

これが私が今していることです:

<input type="hidden" value="@(Model.W.T.ElementAt(i).TId)"
 name="TCs[@(i)].TId" 
 id="TCs_@(i)__TId" data-val="true"/>

私がやりたいのはヘルパーを使用することですが、@Html.HiddenForヘルパーを機能させることができないようです。そのため、上記の少し動的でありながらハードコードされたアプローチを使用しました。注:これは機能しますが、よりクリーンにしたいと思います。

4

2 に答える 2

3

あなたが今していることは、私が知る限り、それを行う唯一の方法です。より単純な@Htm.HiddenFor(...)バージョンの方法がわかりません。私も同様の問題に取り組んできました。それでも、上記のパターンを再利用できると思われる場合は、独自のディスプレイ/エディターテンプレートまたはその他のより抽象的な方法を作成できます。もちろん、「醜い」が単純なアプローチよりも冗長で複雑になります。

于 2012-05-13T20:06:19.953 に答える
1

私はこれをヘルパーにし、他の誰かがこの問題に遭遇した場合に備えて共有することにしました。

ヘルパー:

    public static MvcHtmlString CustomHiddenFor(
        this HtmlHelper html, object ListValue,
        string ListName, int ListIndex, string ListItem)
    {
        return MvcHtmlString.Create(
            string.Format("<input type=\"hidden\" value=\"{0}\" name=\"{1}[{2}].{3}\" id=\"{1}_{2}__{3}\" data-val=\"true\"/>", 
                ListValue.ToString(),
                ListName,
                ListIndex,
                ListItem
                ));
    }

使用(これはiがイテレータであるループから実行されることに注意してください。任意の値は最初のスポットで支払われることになります):

@Html.CustomHiddenFor(Model.W.T.ElementAt(i).TId, "TCs", i, "TId")
于 2012-05-13T21:47:54.823 に答える