4

在我的MVC 4應用程序中,我有一個索引視圖。在這個視圖中,我有兩個部分視圖呈現的div標籤。有兩個按鈕在點擊時使用jQuery在這兩個div之間切換。部分視圖是每個模型的強類型。ASP .NET MVC 4視圖包含兩個部分視圖,每個視圖都有一個表格

問:

我如何通過這些模型的局部視圖? 如何處理部分視圖中的POST請求? 在POST操作方法中,如果ModelState無效,我該如何重新渲染知道ModelStae的視圖?

在這種情況下部分意見是要走的路嗎? 有沒有更好的方法來實現這與MVC 4?

任何幫助表示讚賞。

這裏是我已經嘗試沒有成功:

Index.cshtml

<div id="token"> 
    <!-- insert Token based PartialView --> 
@{ 
    //Html.RenderPartial("_TokenPartial"); 
    Html.RenderAction("TokenBased"); 
} 

<div id="credentials"> 
    <!-- insert Credentials based PartialView --> 
@{ 
    //Html.RenderPartial("_CredentialPartial"); 
    Html.RenderAction("CredentialsBased"); 
} 
</div> 

HTML.RenderPartial("_partial")嘗試,但不能指定型號部分視圖基於。然後我試圖與Html.RenderAction("TokenBased")並在行動返回局部視圖和模型對這一觀點的一個實例:

CredentialController.cs

public ActionResult TokenBased(string token) 
    { 
     ... 

     return View("_TokenPartial", new TokenModel); 
    } 

這裏是局部視圖:

TokenPartial.cshtml

@model TokenModel 

    @using (Html.BeginForm("CreateAgreementToken", "Credential")) 
    { 
     <div class="formscontent"> 
      @Html.LabelFor(x => x.Token) <br /> 
      @Html.TextBoxFor(x => x.Token, new {size = "44" }) 
      @Html.ValidationMessageFor(x => x.Token) 
      <br /> 
      <br /> 

      @Html.LabelFor(x => x.Email) <br /> 
      @Html.TextBoxFor(x => x.Email, new {size = "30" }) 
      @Html.ValidationMessageFor(x => x.Email) 
      <br /> 
      <br /> 

      @Html.CheckBoxFor(x => x.AcceptSubsTerms, new { value = "SubsTerms"}) 
      @Html.LabelFor(x => x.AcceptSubsTerms) 
      @Html.ValidationMessageFor(x => x.AcceptSubsTerms) 
      @Html.ActionLink("SubsTermsLinkText", "Subscription", null, new {target = "_blank"}) 
      <br /> 
      <br /> 
     </div> 
     <br /> 

     <input class="mainbutton" type="submit" value="CreateAgreement_btn_txt"/><br /> 

    } 

這裏是POST操作方法:

[HttpPost] 
    public ActionResult CreateAgreementToken(TokenModel model) 
    { 

     if (ModelState.IsValid) 
     { 
      // Create Agreement 
      // 
      // 

      return RedirectToAction("Welcome"); 
     } 

     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user credentials provided are incorrect."); 

     // Where to redirect to. 
     // How to re-render the Index view that's aware of the ModelState errors 

     return RedirectToAction("Index"); 
    } 

如何處理的控制器操作方法之間的相互作用,索引視圖,並在你有一個Index操作方法呈現一個「正常」情況下的局部視圖像索引視圖向它傳遞一個模型實例。然後在Index POST操作方法中,如果驗證失敗,則通過調用Index視圖向其傳遞無效模型來重新顯示錶單。

謝謝

回答

3

要通過一個模型的部分你做使用@ Html.Partial( 「SomeFile」,SomeModel);

我會建議如果你有多種形式,你給他們每個不同的控制器操作。您可以使用@ Html.BeginForm指定控制器和操作參數。

部分只是一種組織html的方式。一旦頁面呈現出來,他們就沒有上下文,所以我不會太在意。

爲了讓您的視圖瞭解模型狀態中的錯誤,您需要將模型傳遞給它。而不是重定向到索引返回索引視圖並作爲第二個參數傳入模型。

+1

非常感謝你user1714792。你的回答幫助/指引我走向正確的道路。喜歡這個地方。 – Javid

相關問題