0

我在一页中有多个表单,并且该页面继承了一个模型。每个表单提交都需要一个共同的值。因此,公共值存储在隐藏字段中。隐藏字段保持全局,即在所有表单之外,但我的问题是每当我提交表单时,该隐藏字段将变为空。隐藏字段是@Html.HiddenfieldFor(m=>m.FkId),并且此 FkId 在模型中是字符串类型属性,即public string FkId{get;set;}。有人可以指导我如何处理这种情况。如果我在其中一个表单中保留隐藏字段,那么它将进入控制器,但仅用于我保留它的表单提交。但我希望该属性设置一次,并且可以在所有表​​单提交中使用。请帮助我。我该如何解决这个问题

一些相关代码

<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})
}

选项卡三类似,但不幸的是,隐藏文件仅适用于第一个表单提交。然后我返回值以通过 json 查看并再次设置隐藏字段属性,但是对于第二种形式它为空。请帮助

4

2 回答 2

1

首先,您的视图不继承模型,它是强类型的模型的类型。这两个是完全不同的。

但是,要回答您的问题,没有全局隐藏字段之类的东西。字段不是变量。如果要将字段发布到控制器,则需要将其放入表单中。如果您的视图中有多个表单,那么您必须在所有这些表单中放置相同的隐藏字段。因此,您需要将@Html.HiddenFor(m => m.FkId)所有表单放入视图中。

更新:顺便说一句,它不是Html.HiddenFieldFor,它是Html.HiddenFor

于 2013-10-06T16:15:18.140 回答
0

我已经解决了这个问题。我没有在所有不起作用的表单中采用相同的字段,而是采用了独特且不同的隐藏字段属性,然后在每个表单的单独成功功能上,并将每个隐藏字段设置为成功方法中的值。

于 2013-10-07T06:42:34.103 回答