javascript - Asp.Net MVC 3 formcollection在提交后丢失数据

标签 javascript asp.net json asp.net-mvc-3 formcollection

我有一个 Asp.Net MVC 3 应用程序,在单击提交按钮后,我想验证在 formcollection 参数中传递的信息..如果它无效,我返回一个 jSon.. 但之后我的 formcollection 总是返回空

这发生在 chrome 和 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>

我的 Controller

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

最佳答案

不要在带有 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)
{
    //...
}

关于javascript - Asp.Net MVC 3 formcollection在提交后丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302484/

相关文章:

asp.net - 如何在 ItemDataBound 事件期间向 asp 转发器添加空白行?

javascript - 动态添加控件 javascript Asp.net C#

android - JSON 解析 - 第三级 ListView 的 NullPointerException

json - 如何区分 Controller 故意生成的 404 错误和 REST API 中的实际错误?

javascript - C++ isprint() 等效于 JavaScript

javascript - 如何在 bootstrap-daterangepicker 中设置占位符默认显示

c# - DropDownListForModel 无法添加 HTML 属性

python - 如何遍历整个html表并转换为json数据?

javascript - DOM 查询 javascript

Javascript 延时效果 : displaying 30 images/second (read for more detail)