[英]How to send data from javascript to ASP.NET MVC controller using URL
我需要一些帮助。 我使用带有JavaScript和Knockout的ASP.NET MVC4编写小应用程序,我无法将数据从javascript发送到MVC Controller,反之亦然。 例如,JS的一部分看起来像这样:
self.Employer = ko.observable();
self.AboutEmployer = function (id) {
$.ajax({
Url.Action("GetEmployer", "Home")
cache: false,
type: 'GET',
data: "{id:" + id + "}",
contentType: 'application/json; charset=utf-8',
dataType: "json",
success: function (data) {
self.Employer(data);
}
}).fail(
function () {
alert("Fail");
});
};
在ASP.NET MVC Home Controller中,我通过ID获得雇主并将其作为Json返回:
public JsonResult GetEmployer(int id)
{
var employer = unit.Repository<Employer>().GetByID(id);
return Json(employer, JsonRequestBehavior.AllowGet);
}
我的视图返回另一个Controller(Home / KnockOutView)。 我的视图也获得了另一个对象,根据收到的内容,它们具有不同的外观:
...
<b>About Company: </b><a href="#" data-bind="click: $root.AboutEmployer.bind($data, Vacancy().EmployerID)">
<span data-bind=" text: Vacancy().Employer"></span></a>
<div data-bind="if: Vacancy">
<div id="VacancyDescription"><span data-bind="text:DescriptionShort"></span>
</div>
</div>
<div data-bind="if: Employer">
<div data-bind="text: Employer().EmployerDescription"></div>
</div>
一切都很好,我在JS中收到Vacancy和Employer对象并使用Knockout以HTML格式显示它,但我的URL始终保持不变! 但是,当我获得空缺或雇主时,我想一直更改URL。 例如,如果我想使用方法GetEmployer获取Employer,则URL应如下所示:〜/ Home / GetEmployer?id = 3如果我在url: window.location.href = "/home/GetEmployer?id=" + id
处更改此代码字符串Url.Action("GetEmployer", "Home")
字符串url: window.location.href = "/home/GetEmployer?id=" + id
URL将被更改,但Controller会返回一个Json对象并以Json格式在窗口中显示它。 请帮助我更改URL并从URL获取Controller中的信息。 谢谢。
试试下面的代码,希望能帮到你
此代码工作%100,请根据您的方案在文本框下方更改
HTML
<input type="text" id="UserName" name="UserName" />
<input type="button" onclick="MyFunction()"value="Send" />
<div id="UpdateDiv"></div>
使用Javascript:
function MyFunction() {
var data= {
UserName: $('#UserName').val(),
};
$.ajax({
url: "/Home/GetEmployer",
type: "POST",
dataType: "json",
data: JSON.stringify(data),
success: function (mydata) {
$("#UpdateDiv").html(mydata);
history.pushState('', 'New URL: '+href, href); // This Code lets you to change url howyouwant
});
return false;
}
}
控制器:
public JsonResult GetEmployer(string UserName)
{
var employer = unit.Repository<Employer>().GetByID(id);
return Json(employer, JsonRequestBehavior.AllowGet);
}
使用像这样的数据参数{id:id, otherPara:otherParaValue}
$.ajax({
url:Url.Action("GetEmployer", "Home")
type: 'GET',
data: {id:id},
contentType: 'application/json; charset=utf-8',
dataType: "json",
success: function (data) {
alert(data)
}
});
这是我的控制器动作。
[HttpPost]
public ActionResult ActionName(string x, string y)
{
//do whatever
//return sth :)
}
我的帖子就在这里。
<script type="text/javascript">
function BayiyeCariEkle(){
var sth= $(#itemID).text();
var sth2= $(#itemID2).text();
$.post("/ControllerName/ActionName", { x: sth, y: sth2});
}
</script>
由于MVC在处理到同一视图的路由时有点烦人,我已经成功地做到了这一点:
self.Employer = ko.observable();
self.AboutEmployer = function (id) {
$.ajax({
url: "@Url.Action("GetEmployer", "Home", new { id = "PLACEHOLDER"})".replace("PLACEHOLDER", id),
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: "json",
success: function (data) {
self.Employer(data);
}
}).fail(
function () {
alert("Fail");
});
};
您可以使用标准url: "@Url.Action("GetEmployer", "Home")/" + id
,但在刷新时,具有现有ID的路由会保留在后续调用中,因此它开始附加id,这显然不会不行。 通过在调用中指定ID,该行为不再存在。
我认为导航的最佳方式是使用sammy.js。 这是关于kazimanzurrashid.com的帖子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.