2013-10-06 48 views
0

请尽快帮助我。剃刀视图中多个表单中的隐藏字段

我正在使用jquery选项卡和每个选项卡我有不同的形式,所以我有多个窗体在页面中。我在页面中也有一个隐藏字段Id,现在,当我提交表单时,隐藏字段在控制器中变为空。为什么会发生这种情况,因为我在选择自动填充时将值设置为隐藏字段。当用户从自动完成列表中选择值时,我将值设置为隐藏字段。我的意思是隐藏字段不是空的,当我点击提交按钮点击时,我检查了它的警报和隐藏字段显示值,但在控制器隐藏的领域将变得空虚。这是我尝试的第一种方法。其实我想保留隐藏的字段全局因为保存每一个表单,我需要隐藏的字段,因为Id必须保存在每个表格的每个表中。整个页面的模型是相同的。

FIRST Method::: 
    <div id="PageContent"> 
     @Html.HiddenFieldfor(m=>m.fkID) 
    <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" })) 
    { 

    <input type="Submit" id="btnTab1" value="Submit" onclick="CheckUser();"/> 
    } 

     </div> 
     <div id="tabs-2"> 
    @using (Ajax.BeginForm("Evaluation","SaveTab2"{new AjaxOptions { Onsucess= "DisplayMessage" })) 
    { 
    <input type="Submit" id="btnTab2" value="Submit" /> 
    } 
     </div> 
     <div id="tabs-3"> 

    @using (Ajax.BeginForm("Evaluation","SaveTab3"{new AjaxOptions { Onsucess= "DisplayMessage" })) 
    { 
    <input type="Submit" id="btnTab3" value="Submit" /> 
    } 
     </div> 
    </div> 


    </div> 
    <script type="text/javascript"> 

    </script> 

    In the second One I placed hidden field in the form that is in the form of first tab.Now, I am getting the model value in the controller.but after the json response I tried to set the value on the success event , the value is coming but on the submission of second form that hidden field is coming again empty. Please help me to solve this problem. 

    <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" })) 
    { 
    <input type="Submit" id="btnTab2" value="Submit" /> 
    } 
     </div> 
     <div id="tabs-3"> 

    @using (Ajax.BeginForm("Evaluation","SaveTab3"{new AjaxOptions { Onsucess= "DisplayMessage" })) 
    { 
    <input type="Submit" id="btnTab3" value="Submit" /> 
    } 
     </div> 
    </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> 


    In the controller I have done:: 
    public ActionResult SaveTab1(Model obj) 
    { 
    tbl ob =new tbl(); 
    ob.FkId=Obj.fkID; 
    after saving, I return 
    return json(new{hdn=Obj.fkID}) 
    } 

回答

1

您的隐藏字段需要在表单内。

@using (Ajax.BeginForm("Evaluation","SaveTab1"{new AjaxOptions { Onsucess= "DisplayMessage" })) 
{ 
@Html.HiddenFieldfor(m=>m.fkID) 
<input type="Submit" id="btnTab1" value="Submit" onclick="CheckUser();"/> 
} 

否则它不会在提交时发布。

您可以将隐藏字段添加到每个表单,或者您可以使用jQuery来追加任何窗体被点击过的隐藏字段。

更新

$('formID').submit(function(){ 
    $(this).append($('#hiddenID')); // should append your hidden field to whatever form is being submitted. 
}); 
+0

先生,如果我一直隐藏字段的形式,那么它是在控制器只有第一种形式avaialable。没问题,我得到它在控制器中后,我再次将它的值发送给json响应,并再次设置它的值。如果我再次设置它的值,那么对于第二个表单提交,它将再次为空,这可能是因为它仅在第一个表单中的作用域。请澄清,我可以在所有表​​单中使用相同的隐藏字段吗?并在json响应后设置它的值,并可以在另一个表单中再次使用submit? – Sandy

+0

是的,你应该可以把每个表单内的隐藏字段。你在使用jQuery吗? – Trevor

+0

其实我只是想设置一个隐藏字段的值,可以保留每个窗体提交每个帖子相同的值。 – Sandy