2

Asp.Net MVC 3 アプリがあり、送信ボタンをクリックした後、formcollection 引数で渡された情報を検証したい..有効でない場合は jSon を返します..しかし、その後、formcollection は常に null を返します

これはクロムとFFoxで発生します.IEでは正常に動作します

私の見解:

<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"
    });
}
4

1 に答える 1

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)
{
    //...
}
于 2012-04-24T17:47:27.123 に答える