2013-10-06 36 views
0

我在一個頁面中有多個表單,並且該頁面繼承了一個單一模型。每個表單提交都需要一個共同的值。所以,共同的價值是存儲在隱藏的領域。隱藏的字段保持全局,即在所有表單之外,但是我的問題是每當我提交表單時,隱藏字段將變爲空。隱藏字段爲@Html.HiddenfieldFor(m=>m.FkId),並且此FkId是字符串類型保留模型,即public string FkId{get;set;}。可以有人請指導我如何處理這種情況。如果我將隱藏字段保存在其中一個表單中,那麼它將進入控制器,但僅用於保存它的表單提交。但我希望該屬性設置一次,並可以在所有表​​單提交中使用。請幫助我。我怎樣才能理清這個問題在Mvc 4.0中以多種形式處理隱藏字段

一些相關的代碼

<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並再次設置隱藏字段屬性,但它爲第二種形式爲空。請幫助

+0

什麼是'Html.HiddenFieldFor'?你甚至不知道語法錯誤信息?它應該是'Html.HiddenFor'。 – ataravati

回答

0

我已經解決了這個問題。我沒有在所有不工作的形式中使用相同的字段,而是採用了獨特且不同的隱藏字段屬性,並在每種形式的分離成功函數之後,將每個隱藏字段設置爲成功方法中的一個值。

1

首先,您的視圖不會繼承該模型,它是強類型的類型你的模型。這兩個是完全不同的。

但是,要回答你的問題,沒有全球隱藏領域這樣的事情。字段不是變量。如果你想把一個字段發佈到你的控制器,你需要把它放在表單中。如果您的視圖中有多個表單,那麼您必須在所有這些表單中放置相同的隱藏字段。所以,你需要把@Html.HiddenFor(m => m.FkId)放在你的視圖中的所有表單中。

更新:順便說一下,它不是Html.HiddenFieldFor,它是Html.HiddenFor

+0

但是,如果我這樣做,仍然隱藏的字段將在控制器中爲空。它只是在第一種形式不提交給其他人的情況下顯示價值。我想,如果一旦表單提交它返回空模型,那麼,在控制器,當我得到該屬性,我重新發回它查看此返回Json(新{hdn = model.FkId}),我再次設置隱藏ajax.begin表單的成功事件如下所示:function success(Json){$(「#FkId」)。val(Json.Hdn)}。現在,正如您所建議的那樣,隱藏字段應該再次存儲此值,但它對於第二個表單提交顯示爲空。先生,請幫助我。 – Sandy

+0

請用您的Controller Action和您的View的代碼更新您的問題。 – ataravati

+0

先生,我已更新代碼。請檢查並請幫助我。 – Sandy