Asp.net mvc MVC4.0中多表单隐藏字段的处理

Asp.net mvc MVC4.0中多表单隐藏字段的处理,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,razor,logic,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Razor,Logic,我在一个页面中有多个表单,该页面继承了一个模型。每个表单提交都需要一个公共值。所以,公共值存储在隐藏字段中。隐藏字段是全局的,即在所有表单之外,但我的问题是,每当我提交表单时,该隐藏字段都会变为空。隐藏字段是@Html.HiddenfieldFor(m=>m.FkId),该FkId是模型i.e中的字符串类型属性,公共字符串FkId{get;set;}。有人能告诉我如何处理这种情况吗。若我在其中一个表单中保留隐藏字段,那个么它将进入控制器,但只用于我保存它的表单提交。但我希望该属性设置一次,并且可

我在一个页面中有多个表单,该页面继承了一个模型。每个表单提交都需要一个公共值。所以,公共值存储在隐藏字段中。隐藏字段是全局的,即在所有表单之外,但我的问题是,每当我提交表单时,该隐藏字段都会变为空。隐藏字段是
@Html.HiddenfieldFor(m=>m.FkId)
,该FkId是模型i.e
中的字符串类型属性,公共字符串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>

标签三类似,但不幸的是,隐藏字段只在第一次表单提交时出现。然后,我通过json将值返回给view,并再次设置hidden field属性,但第二种形式的值为null。请帮助

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

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


更新:顺便说一句,它不是
Html.HiddenFieldFor
,而是
Html.HiddenFor
,我已经解决了这个问题。我没有在所有不起作用的表单中使用相同的字段,而是使用了一个唯一的、不同的隐藏字段属性,然后在每个表单的单独成功函数中,在成功方法中为每个隐藏字段设置一个值。

但如果我这样做,则该隐藏字段在控制器中仍然是空的。它只是在第一次表单提交时显示值,而不是为其他表单提交。我想,如果表单提交后返回空模型,那么,在控制器中,当我获得该属性时,我会通过这个返回Json(new{hdn=model.FkId})将其重新发送回视图,并再次在ajax.begin表单的success事件中设置隐藏字段,如下所示:function success(Json){$(“#FkId”).val(Json.hdn)}。现在,正如您所建议的,隐藏字段应该再次存储此值,但对于第二个表单提交,它显示为null。请帮助我,先生。请用控制器操作和视图的代码更新您的问题。先生,我已经更新了代码。请检查并帮助我。什么是
Html.hiddenfield for
?你怎么连语法错误信息都没有?它应该是
Html.HiddenFor
。这是错误地写在这里的,否则一切都很顺利。请帮我建立逻辑。语法无关。谢谢。什么是
Html.hiddenfield
?你怎么连语法错误信息都没有?它应该是
Html.HiddenFor
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})
}