javascript - 使用ajax将整个模型发布回 Controller

标签 javascript c# jquery ajax asp.net-mvc

我是 asp.net mvc 和网络技术的初学者。 现在我被困在某个时候了。我有一个创建用户页面。当管理员用户想要添加新用户时,他被重定向到创建具有空数据类的用户页面。在该页面中,数据类已填满。现在我想使用 POST 方法将该模型的数据返回给 Controller 。

我想要实现的是将整个模型作为 JSON 对象直接发布回 Controller 并且它始终为 null。

在创建新用户时点击:

[HttpGet]
public ActionResult CreateUser()
{
    var newUser = new User();
    return View(newUser);
}

我的CreateUser查看代码:

@model WebApplication7.Models.User
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>CreateUser</title>
    <h2>Create new user</h2>
</head>
<body>
    <div>
        <table>
            <tr>
                <td>Username : </td>
                <td>
                    @Html.TextBoxFor(model => model.userName, new { @class = "", id = "txtUsername", @maxlength = 6 })
                </td>
            </tr>

            <tr>
                <td>Password : </td>
                <td>
                    @Html.TextBoxFor(model => model.passWord, new { @class = "", id = "txtUsername", @maxlength = 6 })
                </td>
            </tr>

            <tr>
                <td>First Name : </td>
                <td>
                    @Html.TextBoxFor(model => model.firstName, new { @class = "", id = "txtUsername", @maxlength = 6 })
                </td>
            </tr>

            <tr>
                <td>Last Name : </td>
                <td>
                    @Html.TextBoxFor(model => model.lastName, new { @class = "", id = "txtUsername", @maxlength = 6 })
                </td>
            </tr>

            <tr>
                <td>Display name : </td>
                <td>
                    @Html.TextBoxFor(model => model.displayName, new { @class = "", id = "txtUsername", @maxlength = 6 })
                </td>
            </tr>

            <tr>
                <td>Email : </td>
                <td>
                    @Html.TextBoxFor(model => model.emailID, new { @class = "", id = "txtUsername", @maxlength = 6 })
                </td>
            </tr>    
            <tr>
                <td>
                <input type="button" name="btnClear" value="Submit" class="btn-Clear" onclick="Submit()" />
                    </td>
            </tr>
        </table>
    </div>
</body>
</html>

提交功能代​​码:

<script>
    function Submit() {
        $.ajax({
            type: "POST",
            url: "/UserManagement/SubmitNewUserData",
            data: JSON.stringify({ userData: model }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                ServiceSucceeded(msg);
            },
            error: function () {
                return "error";
            }
        });
    }
</script>

我的 Controller 代码:

[HttpPost]
public JsonResult SubmitNewUserData(User userData)
{
    if (userData != null)
    {

    }
    return Json(true);
}

此处的userData 始终为空。请帮我将该模型发回该 Controller 。谢谢。

最佳答案

你没有指出model的值是什么是,但为了工作,它需要

var model = {
    userName: $('#userName').val(),
    passWord: $('#passWord').val(),
    ... // etc for each property of User
};

假设你删除所有你new { id = "txtUsername" }生成无效(重复)名称属性的属性。

一个更简单的解决方案是将所有表单控件包装在 <form> 中标记然后使用 .serialize();正确序列化所有表单控件。然后脚本将是

$.ajax({
    type: "POST",
    url: '@Url.Action("SubmitNewUserData", "UserManagement")', // always use Url.Action() to generate your url's
    data: $('form').serialize;
    dataType: "json",
    success: function (msg) {
        ServiceSucceeded(msg);
    },
    error: function () {
        return "error";
    }
});
return false; // cancel the default submit

要进一步改进,请删除您的 onclick="Submit()"并处理 .submit()事件使用 Unobtrusive Javascript

$('form').submit(function() {
    if (!$(this).valid()) {
        return;
    }
    $.ajax({
       ....
    });
    return false;
});

if (!$(this).valid()) {将允许您处理客户端验证,您应该通过包含 @Html.ValidationMessageFor(..) 来完成 helper ,包括相关的jquery.validate.jsjquery.validate.unobtrusive.js脚本,并将验证属性添加到您的模型属性,以便您获得客户端和服务器端验证。

旁注:应使用 @Html.PasswordFor() 生成密码字段.还不清楚为什么您使用 ajax 而不是标准提交(为什么您希望用户停留在同一页面上并再次编辑它?

关于javascript - 使用ajax将整个模型发布回 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486599/

相关文章:

javascript - 为什么将 Buefy 导入我的 Vuejs 元素会使 <h1> 标签和某些 Bootstrap 元素显示错误的样式?

c# - 如何弹出然后立即推送 xamarin 页面

c# - 如何使用 LINQ 将一组字符串缩减为一个分隔字符串?

javascript - 页面更改后,jQuery Mobile ajax 加载 jsonp 不起作用

android - 用于跨平台应用程序开发或 JQUERY 移动的离线 HTML5 或 native SDK

javascript - 如何在backbone js中循环调用 View 事件

javascript - 运行 PHP 代码,根据文本元素的值从数据库获取值

javascript - Angular:指令与管道

javascript - ajax(PHP 和 Javascript)出现问题 - 如何正确传输?

c# - 在 C# 中使用参数的成本