我在另一个视图和控制器上使用非常相似的代码,但是由于某些原因我无法使用这个代码。无论我做什么,控制器参数都显示未定义,即使javascript中的名称和传递正常工作。任何帮助,将不胜感激!
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);
}
答案 0 :(得分:3)
你需要的只是:
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>
答案 1 :(得分:2)
您可以按照自己的方式进行,但我也需要查看您的路线。有一种更好的方式来进行这个电话。
var data = {
"name": $('#txtUsername').val(),
"pass": $('#txtPassword').val()
};
$.post('@Url.Action("Login", "Home")', data, function(response) {
//Do something with the response if you like
});
答案 2 :(得分:2)
我不喜欢字符串连接和硬编码字符串。
首先,让我们使用HTML帮助程序来解析操作的网址。
@Url.Action("Login", "User")
其次,让我们将数据作为javascript对象传递。
$.post("@Url.Action("Login", "User")",
{
name: name,
pass: pass
}, loginSuccess, "application/json");
答案 3 :(得分:2)
你发送参数作为URL的一部分(因此,有效地,无论jquery $ .post()如何都使其GET)并且你的控制器严格要求HttpPost(意思是http请求体中的参数,而不是查询字符串中的参数)
不要理会在网址中使用用户名/密码是非常糟糕的做法。
尝试将数据发送为:
$ .post('url / of / the / controller',{name:$('#txtUsername')。val(),pass:$('#txtPassword')。val()});
答案 4 :(得分:1)
您正在调用控制器操作方法错误。尝试将name
和pass
作为$.post
调用中的数据传递,而不是附加到网址上。
使控制器操作方法采用LogIn
类型的模型也可能更清晰。 LogIn
可以有两个属性(Name
和Pass
)。这样,当您在$.post
中发送数据时
你可以像{ name: 'someName', pass: 'somePass' }
一样发送它。
答案 5 :(得分:1)
您可以将其发布为::
$.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);
}