2011-05-09 126 views
2

我正在構建一個WebPages網站,並在嘗試將ModelState數據傳遞到部分頁面時遇到問題。Webmatrix:將ModelState傳遞給部分頁面

這裏是Create.cshtml代碼:

@{ 
    Page.Title = "Create Fund"; 

    var name = ""; 

    if (IsPost) { 
     name = Request.Form["name"]; 

     if (!name.IsValidStringLength(2, 128)) { 
      ModelState.AddError("name", "Name must be between 2 and 128 characters long."); 
     } 
    } 
} 

@RenderPage("_fundForm.cshtml", name) 

這裏是_fundForm.cshtml代碼:

@{ 
    string name = PageData[0]; 
} 

<form method="post" action="" id="subForm"> 
    <fieldset> 
     @Html.ValidationSummary(true) 
     <legend>Fund</legend> 
     <p> 
      @Html.Label("Name:", "name") 
      @Html.TextBox("name", name) 
      @Html.ValidationMessage("name", new { @class = "validation-error" }) 
     </p> 
     <p> 
      <input type="submit" name="submit" value="Save" /> 
     </p> 
    </fieldset> 
</form> 

我遇到的問題是,當有錯誤「的名字「,驗證錯誤不會顯示。在兩頁之間是否有一種特殊的方法來通過ModelState

_fundForm將在Create.cshtml和Edit.cshtml之間共享。

回答

3

ModelState的只讀屬性System.Web.WebPages.WebPage class。它的後臺字段是私人的ModelStateDictionary並在第一次訪問時被初始化。我看不到任何方式從通過反射做它迫使的ModelState跨頁,除了如被看見在SO問題:Can I change a private readonly field in C# using reflection?

否則,你可以簡單地調用使用第三個參數,就像這樣:

@RenderPage("_fundForm.cshtml", name, ModelState); 

實際上,頁面名稱後面的第一個參數將成爲新頁面的Model,所以有足夠的空間(即下一個參數)來傳遞ModelState。

在你的「_fundForm.cshtml」合併通過調用頁面與本地一個接收到的ModelState中,像這樣:

@{ 
    //In _fundForm.cshtml 
    var ms = PageData[1]; 
    ModelState.Merge((ModelStateDictionary)ms); 
} 
+0

這就是我一直在尋找的答案。 – Patas 2011-05-09 21:53:41