2012-04-24 6 views
2

私はAsp.Net MVC 3アプリを持っています。私が送信ボタンをクリックした後、formcollection引数に渡された情報を検証したいと思います。 JSON ..しかし、IEでそれがAsp.Net MVC 3 formcollectionがサブミット後にデータを失う

私の見解で正常に動作します。..私のformcollectionは常にnull

を返すことに、これはクロムとFFoxで発生した後:

<li id="opc-register" class="section allow"> 
    <div id="checkout-step-register" class="step a-item" style="display: none;"> 
     <form id="co-register-form" action=""> 
     <div id="checkout-register-load"> 
      @Html.Action("OpcRegisterForm", "Checkout") 
     </div> 
     </form> 
     <script type="text/javascript"> 
      Register.init('#co-register-form', '@(storeLocation)checkout/OpcSaveRegister/'); 
     </script> 
     <div class="buttons" id="register-buttons-container">       
      <button type="button" class="paymentmethodnextstepbutton" onclick="Register.save()"> 
       <span>@T("Common.Continue")</span> 

      </button> 

      <span class="please-wait" id="register-please-wait" style="display: none;"> 
       <img src="@Url.Content("~/Content/Images/ajax_loader_small.gif")" 
    alt="@T("Common.LoadingNextStep")" title="@T("Common.LoadingNextStep")" /> 
       @T("Common.LoadingNextStep")</span> 
     </div> 
    </div> 
</li> 

私のコントローラ

[HttpPost] 
public ActionResult OpcSaveRegister(FormCollection form) 
{ 

    var registerModel = PrepareRegisterModel(); 

    registerModel.Email = form["Email"]; 
    registerModel.FirstName = form["FirstName"]; 
    ... 

    if (TryValidateModel(registerModel)) 
    { 
     .... 
    } 

    //If we got this far, something failed, redisplay form 
    return Json(new 
    { 
     update_section = new UpdateSectionJsonModel() 
     { 
      name = "register", 
      html = RenderPartialViewToString("OpcRegister", registerModel) 
     }, 
     goto_section = "register" 
    }); 
} 
+0

どのように反復するList値を使用しますか?厳密に型指定されたモデルはList <>値をサポートしていません。これは、オプションなしでFormCollectionを使用する必要がある理由です。 – ajayDevgan

答えて

2

MVCの投稿でFormCollectionを使用しないでください。フォーム上の投稿に投稿できるすべてのプロパティを含む厳密に型指定されたViewModelを使用します。

public class RegisterViewModel 
{ 
    public string FirstName { get; set; } 
    public string Email { get; set; } 
    //... 
} 

そして、あなたのビューであなたがこれらのプロパティを設定したい::

@Html.EditorFor(m => m.FirstName) 
@Html.EditorFor(m => m.Email) 

、その後、あなたの行動のためにあなたが

を持っていると思いますが、のようなクラスを持つことができます。例えば

[HttpPost] 
public ActionResult OpcSaveRegister(RegisterViewModel registerModel) 
{ 
    //... 
} 
関連する問題