Joh*_*ith 6 c# asp.net asp.net-mvc jquery asp.net-mvc-4
我想调用ASP.NET MVC4控制器并让它返回一个jQuery方法的字符串,然后输出带有alert()的字符串.以下代码仅输出object Object.
jQuery的:
$launchTRs = function (appID) {
var html = $.get("/PartialView/GetTRAsString?appID=" + appID, function (data) { });
alert(html.toString());
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
Outut:
[object Object]
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 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");
}
Run Code Online (Sandbox Code Playgroud)
AJAX中的第一个A字母代表异步,因此您应该将警报放在成功回调中,这是结果可用的唯一位置:
$.get('/PartialView/GetTRAsString', { appID: appID }, function (data) {
alert(data);
});
Run Code Online (Sandbox Code Playgroud)
还要记住,在控制器动作中生成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);
}
Run Code Online (Sandbox Code Playgroud)
然后你的视图将被强烈输入到模型中,你将在里面生成必要的标记:
@model IEnumerable<Revision>
<ul>
@foreach (var revInfo in Model)
{
<li>
@revInfo.RevDesc
</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
试试这个:
var html = "";
$.ajax({
url: "/PartialView/GetTRAsString",
method: 'GET',
data: {appId: appID },
success: (resp){
html = resp.html;
}
});
Run Code Online (Sandbox Code Playgroud)
然后你的行动方法将是:
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});
}
Run Code Online (Sandbox Code Playgroud)
使用AJAX的另一个解决方案 -
控制器动作 -
public ActionResult GetString(string input)
{
return Content(input + ", Hello!!!");
}
Run Code Online (Sandbox Code Playgroud)
查看 -
<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" />
Run Code Online (Sandbox Code Playgroud)
当你点击 -

| 归档时间: |
|
| 查看次数: |
50553 次 |
| 最近记录: |