【发布时间】:2013-10-23 09:13:49
【问题描述】:
我正在尝试为我正在开发的这个网站设计一个标签控制器,但我无法让 json-part 正常工作。
从顶部开始,我的 cshtml 视图中有一个隐藏的输入元素(JS 从 this SO post 获取):
<input type="hidden" id="tagController" style="width: 350px;" />
...
$(document).ready(function () {
var lastResults = [];
$("#tagController").select2({
multiple: true,
placeholder: "Please enter tags",
tokenSeparators: [","],
ajax: {
multiple: true,
url: "/UnitDetails/GetTagsAsJson/",
dataType: "json",
type: "POST",
data: function (term, page) {
return {
json: JSON.stringify({ results: [{ id: "foo", text: "foo" }, { id: "bar", text: "bar" }] }),
q: term
};
},
results: function (data, page) {
lastResults = data.results;
return data;
}
},
createSearchChoice: function (term) {
var text = term + (lastResults.some(function (r) { return r.text == term }) ? "" : " (new)");
return { id: term, text: text };
},
});
});
然后,我的控制器中有一个动作:
[HttpPost]
public JsonResult GetTagsAsJson()
{
return Json(Model.TagsAvailable, JsonRequestBehavior.AllowGet);
}
然后,TagsAvailable 列表将填充到我的索引操作中:
...
foreach (var tag in GetAvailableTags())
{
Model.TagsAvailable.Add(tag.Name);
}
...
最后,GetAvailableTags() 正在调用 wcf 服务,该服务在 BaseTagController 中返回一组 TagContract:
public List<TagContract> GetAvailableTags()
{
return UnitClient.GetAllUnitTags().Select(unitTag => new TagContract
{
Id = unitTag.Id,
Name = unitTag.Name
}).ToList();
}
在 chrome 中检查控制台时,我收到以下错误:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
作为记录,我知道服务返回请求的数据这一事实,我猜这更多是我编写的代码的问题:)
【问题讨论】:
-
您不是发布到带有数据的操作,但该操作的方法签名不带参数。我不认为 GetTagsAsJson() 受到打击,它正在尝试调用 GetTagsAsJson(results)
-
您应该尝试调试您的 GetTagsAsJson 操作并查看它何时中断。此外,为什么使用 HttpPost 并在 GET 中允许返回一个 json?
标签: javascript jquery asp.net-mvc razor jquery-select2