JsonResult控制器参数总是null



我在另一个视图和控制器上使用非常相似的代码,这是完美的,但由于某种原因我不能得到这个工作。无论我做什么控制器参数显示未定义,即使javascript中的name和pass工作正常。任何帮助将不胜感激!

View:
@using (Html.BeginForm())
{
 <fieldset>
 <legend>User</legend>
       Username:
            @Html.TextBox("txtUsername")
       <br/>
       Password:
            @Html.TextBox("txtPassword")
       <br />
       <p>
            <input type="submit" id="btnLogin" value="Login" />
       </p>
 </fieldset>
 }       
 <script>
 $(function() {
      $("#btnLogin").click(login);
 });
     function login() {
         var name = $('#txtUsername').val();
         var pass = $('#txtPassword').val();
     $.post("/User/Login/" + name + "/" + pass, null, loginSuccess, "json");
}
function loginSuccess(result) {
    alert(result);
}
</script>

Controller:
public ActionResult Login()
{
    return View("Login");
}
[HttpPost]
public JsonResult Login(string name, string pass)
{
    string result = "test result";
    return Json(result);
}

你只需要:

View:
@using (Html.BeginForm())
{
 <fieldset>
 <legend>User</legend>
   Username:
        @Html.TextBox("txtUsername")
   <br/>
   Password:
        @Html.TextBox("txtPassword")
   <br />
   <p>
        <input type="button" id="btnLogin" value="Login" />
   </p>
 </fieldset>
 }      

然后控制器:

Controller:
public ActionResult Login()
{
    return View("Login");
}
[HttpPost]
public JsonResult Login(string name, string pass)
{
    string result = "test result";
    return Json(result);
}

ajax部分:

<script type="text/javascript">
$( "#btnLogin" ).click(function() {

$.ajax({
                url: "@Url.Action("YourControllerActionName", "YourControllerName")",
                type: 'POST',
                data: {
                    name: $('#txtUsername').val(),
                    pass: $('#txtPassword').val()
                },
                success: function(result) {
                      alert(result); 
                }
            });
});
<script>

你发送参数作为URL的一部分(因此,有效地,使它GET不管jquery $.post())和你的控制器严格期望HttpPost(意思,参数在http请求体,而不是在查询字符串)。

撇开在url中包含用户名/密码这一事实不谈,

尝试发送数据

$。帖子(url///控制器,{名称:$("# txtUsername").val(),通过:美元(# txtPassword) .val ()});

我不喜欢字符串连接和硬编码字符串。

首先,让我们使用HTML帮助器来解析操作的URL。

@Url.Action("Login", "User")
第二,让我们将数据作为javascript对象传递。

$.post("@Url.Action("Login", "User")",
    {
        name: name,
        pass: pass
    }, loginSuccess, "application/json");

你可以按你的方式做,但我也需要看到你的路由。不过,有一个更好的方法来打这个电话。

var data = {
    "name": $('#txtUsername').val(),
    "pass": $('#txtPassword').val()
};
$.post('@Url.Action("Login", "Home")', data, function(response) {
   //Do something with the response if you like
});

您正在错误地调用您的控制器动作方法。尝试在$.post调用中将namepass作为数据传递,而不是附加到url上。

使您的控制器动作方法采用LogIn类型的模型也可能更简洁。LogIn可以有两个属性(NamePass)。这样当你在$.post中发送数据时你可以发送{ name: 'someName', pass: 'somePass' }

你可以发布到::

    $.ajax({
           type:'POST',
           url:"User/Login",
           data:{UserName:$("#UserName").val(),Password:$("#Password").val()},
           success:function(data){
               alert(data);
           }
    })

和服务器端,你会得到这样的信息::

[HttpPost]
public JsonResult Login(string Username, string Password)
{
    string result = "test result";
    return Json(result);
}

最新更新