【发布时间】:2013-09-28 17:14:33
【问题描述】:
我需要一些帮助。我使用带有 JavaScript 和 Knockout 的 ASP.NET MVC4 编写小应用程序,我无法将数据从 javascript 发送到 MVC 控制器,反之亦然。比如JS的部分是这样的:
JavaScript
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 返回:
C#
public JsonResult GetEmployer(int id)
{
var employer = unit.Repository<Employer>().GetByID(id);
return Json(employer, JsonRequestBehavior.AllowGet);
}
我的视图返回另一个控制器 (Home/KnockOutView)。我的视图还获得了另一个对象,根据收到的内容,有不同的外观:
HTML
...
<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,当我得到空缺或雇主时。
例如,如果我想获取 Employer,使用 GetEmployer 方法,URL 应该是这样的:~/Home/GetEmployer?id=3
如果我改变这串代码
Url.Action("GetEmployer", "Home") url: window.location.href = "/home/GetEmployer?id=" + id 的 URL 将被更改,但控制器会返回一个 Json 对象并以 Json 格式在窗口中显示它。
请帮助我更改 URL 并从 URL 获取控制器中的信息。
谢谢。
【问题讨论】:
-
在发布 JSON 时必须小心。您的
data不是有效的 JSON,因为它缺少属性名称周围的引号。获取 JSON 字符串的最简单方法是在常规 javascript 对象上使用JSON.stringify,而不是尝试自己构建字符串。 (确保您使用的是相当新的浏览器(IE8+ 或真正的浏览器),或者如果您必须支持 IE7,则使用像 json2.js 这样的库)
标签: c# javascript asp.net knockout.js