【问题标题】:Handling hidden field in multiple forms in Mvc 4.0在 Mvc 4.0 中处理多种形式的隐藏字段
【发布时间】:2013-10-13 04:36:38
【问题描述】:

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

一些相关代码

<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 返回值以查看并再次设置隐藏字段属性,但是对于第二种形式,它为 null。请帮助

【问题讨论】:

  • Html.HiddenFieldFor 是什么?你怎么连语法错误信息都没有?应该是Html.HiddenFor

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor logic


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    更新:顺便说一下,不是Html.HiddenFieldFor,而是Html.HiddenFor

    【讨论】:

    • 但如果我这样做,控制器中的隐藏字段仍然为空。它只是在第一个表单提交而不是其他人的情况下显示价值。我想,如果一旦表单提交它返回空模型,那么,当我获得该属性时,在控制器中,我通过这个 return Json(new{hdn=model.FkId}) 将它重新发送回查看,然后我再次设置隐藏ajax.begin 形式的成功事件中的字段如下所示:函数成功(Json){$(“#FkId”).val(Json.Hdn)}。现在,正如您所建议的,隐藏字段应再次存储此值,但对于第二个表单提交,它显示为 null。请先生帮帮我。
    • 请使用控制器操作和视图的代码更新您的问题。
    • 先生,我已经更新了代码。请检查并帮助我。
    • Html.HiddenFieldFor 是什么?你怎么连语法错误信息都没有?应该是Html.HiddenFor
    • 这是错误地写在这里,否则一切都很好。请帮助我建立逻辑。不关心语法。谢谢。
    猜你喜欢
    • 2016-09-06
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多