0

1 つのページに複数のフォームがあり、そのページは 1 つのモデルを継承しています。すべてのフォーム送信には共通の値が必要です。したがって、共通の値は隠しフィールドに格納されます。非表示フィールドはグローバル、つまりすべてのフォームの外に保持されますが、私の問題は、フォームを送信するたびに、その非表示フィールドが空になることです@Html.HiddenfieldFor(m=>m.FkId)public string FkId{get;set;}この状況をどのように処理するか。フォームの1つに非表示フィールドを保持すると、それはコントローラーに送信されますが、保持したフォーム送信に対してのみです。しかし、そのプロパティを一度設定して、すべてのフォーム送信で使用できるようにしたい.助けてください. どうすればこの問題を解決できますか

関連するコード

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Nunc tincidunt</a></li>
        <li><a href="#tabs-2">Proin dolor</a></li>
        <li><a href="#tabs-3">Aenean lacinia</a></li>
    </ul>
    <div id="tabs-1">
        @using (Ajax.BeginForm("Evaluation","SaveTab1"{new AjaxOptions { Onsucess= "DisplayMessage" }))
        {
            @Html.HiddenFieldfor(m=>m.fkID)
            <input type="Submit" id="btnTab1" value="Submit" onclick="CheckUser();"/>
        }
    </div>
    <div id="tabs-2">
        @using (Ajax.BeginForm("Evaluation","SaveTab2"{new AjaxOptions { Onsucess= "DisplayMessage" }))
        {
            @Html.HiddenFieldfor(m=>m.fkID)
            <input type="Submit" id="btnTab2" value="Submit" />
        }
    </div>
    <div id="tabs-3">
        @using (Ajax.BeginForm("Evaluation","SaveTab3"{new AjaxOptions { Onsucess= "DisplayMessage" }))
        {
            @Html.HiddenFieldfor(m=>m.fkID)
            <input type="Submit" id="btnTab3" value="Submit" />
        }
    </div>
</div>

<script type="text/javascript">
    function DisplayMessage(Json)
    {
       alert( $("#fkID").val(Json.hdn));
       // and Alert is showing the value
       $("#fkID").val(Json.hdn);
    }
</script>

コントローラーには次のものがあります。

public ActionResult SaveTab1(Model obj)
{
    tbl ob =new tbl();
    ob.FkId=Obj.fkID;
    // after saving, I return

    return json(new{hdn=Obj.fkID})
}

public ActionResult SaveTab2(Model obj)
{
    tbl ob =new tbl();
    ob.FkId=Obj.fkID;

    //after saving, I return
    return json(new{hdn=Obj.fkID})
}

タブ 3 も同様ですが、残念ながら非表示のフィールドは最初のフォーム送信時にのみ表示されます。次に、値を返してjsonで表示し、隠しフィールドプロパティを再度設定しますが、2番目のフォームではnullになります。助けてください

4

2 に答える 2

1

まず第一に、ビューはモデルを継承せず、モデルの型に強く型付けされています。この 2 つは完全に異なります。

しかし、あなたの質問に答えるために、グローバル隠しフィールドのようなものはありません。フィールドは変数ではありません。フィールドをコントローラーに投稿したい場合は、フォーム内に配置する必要があります。ビューに複数のフォームがある場合、それらすべてのフォーム内に同じ非表示フィールドを配置する必要があります。@Html.HiddenFor(m => m.FkId)そのため、ビュー内のすべてのフォームを配置する必要があります。

更新: ちなみに、それは ではありませHtml.HiddenFieldForHtml.HiddenFor

于 2013-10-06T16:15:18.140 に答える
0

私は問題を解決しました。機能していなかったすべてのフォームで同じフィールドを取得する代わりに、一意で異なる非表示フィールドのプロパティを取得し、各フォームの成功関数を分離して、すべての非表示フィールドに成功メソッドの値を設定しました。

于 2013-10-07T06:42:34.103 に答える