我想调用ASP.NET MVC4控制器并让它返回一个jQuery方法的字符串,然后输出带有alert()的字符串.下面的代码只输出对象Object.
jQuery的:
$launchTRs = function (appID) { var html = $.get("/PartialView/GetTRAsString?appID=" + appID,function (data) { }); alert(html.toString()); }
ASP:
public string GetTRAsString(string appID) { // Populate revisions string html = "<ul>"; foreach(RevesionInfo revInfo in revisions) { html += "<li>" + revInfo.RevDesc + "</li>"; } html += "</ul>"; return html; }
Outut:
[object Object]
解决方法
在ASP.NET MVC控制器中,操作不返回字符串.他们返回ActionResults.
因此,首先要修复你的行动(请阅读下面的内容,了解为什么我将修正用斜体,这是因为这只是第一阶段):
public ActionResult GetTRAsString(string appID) { // Populate revisions string html = "<ul>"; foreach(RevesionInfo revInfo in revisions) { html += "<li>" + revInfo.RevDesc + "</li>"; } html += "</ul>"; return Content(html,"text/html"); }
AJAX中的第一个A字母代表异步,因此您应该将警报放在成功回调中,这是结果可用的唯一位置:
$.get('/PartialView/GetTRAsString',{ appID: appID },function (data) { alert(data); });
还要记住,在控制器动作中生成HTML是一个糟糕的主意.混合C#和HTML导致丑陋,我不想发表评论.
在ASP.NET MVC中,V代表View,所以继续使用它们.控制器操作的目的是获取模型并将此模型传递给视图以进行投影:
public ActionResult GetTRAsString(string appID) { IEnumerable<Revision> revisions = ... go get your revisions from the DB or something return PartialView(revisions); }
然后你的视图将被强烈输入到模型中,你将在里面生成必要的标记:
@model IEnumerable<Revision> <ul> @foreach (var revInfo in Model) { <li> @revInfo.RevDesc </li> } </ul>