我想调用ASP.NET MVC4 Controller并让它将字符串返回给jQuery方法,然后使用alert()输出该字符串。以下代码仅输出object 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]
答案 0 :(得分:22)
在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>
答案 1 :(得分:9)
试试这个:
var html = "";
$.ajax({
url: "/PartialView/GetTRAsString",
method: 'GET',
data: {appId: appID },
success: (resp){
html = resp.html;
}
});
然后你的行动方法将是:
public JsonResult GetTRAsString(string appID)
{
// Populate revisions
string html = "<ul>";
foreach(RevesionInfo revInfo in revisions)
{
html += "<li>" + revInfo.RevDesc + "</li>";
}
html += "</ul>";
return Json(new {html});
}
答案 2 :(得分:8)
使用AJAX的另一个解决方案 -
控制器操作 -
public ActionResult GetString(string input)
{
return Content(input + ", Hello!!!");
}
查看 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$('#click1').click(function (e) {
$.ajax({
url: "@Url.Action("GetString")",
type: "GET",
dataType: "json",
data: {
input: 'John'
},
error: function (response) {
alert(response.responseText);
},
success: function (response) {
alert(response);
}
});
});
});
</script>
<input type="button" value="Click Me" id="click1" />
当您点击 -
时
答案 3 :(得分:1)
建议返回JSONResult,因为这是最常见的做法,例如使用模仿引擎,如Mustache,或者其他任何东西,而不只是在服务器端的值中填充手工模板。
像这样:服务器的东西:
public JSONResult ActionName()
{
var result=new { Success="False", Message="Error Message"};
return Json(result, JsonRequestBehavior.AllowGet);
}
客户端的东西:
var template = "<h1>{{your property values here}}</h1>",
html = '';
$('#sampleArea').html(html);
$.getJSON('YourController/ActionName', function(data) {
html = Mustache.to_html(template, data);
});
以上更多信息: