将一个字符串从MVC Controller返回到jQuery

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)


Jam*_*mes 9

试试这个:

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)


ram*_*ilu 8

使用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)

当你点击 -

在此输入图像描述

  • 警报总是来自错误,因为它期待json.删除行:dataType:"json",并在控制器中返回Content(input +",Hello !!!","text/html"); 警报将来自成功. (2认同)