8

我正在尝试将生成的 HTML 字符串返回到视图以动态生成带有结果的 HTML 表。我无法获得返回的 HTML 字符串,非常感谢任何建议和帮助。

这是我的控制器代码

    public ActionResult ValidateTrams()
    {
        string html = "";
        if (Request.Files.Count == 0 || Request.Files[0].ContentLength == 0)
        {
        }

        else
        {
            html = ProcessTextFile(Request.Files[0].InputStream);
        }

        return View(html);
    }

我正在尝试像这样在 jquery 中获取返回的结果

$('#tramsView').live('click', function () {

$.ajax({
    url: '/Booking/ValidateTrams',
    type: 'POST',
    dataType: 'jsonp',
    success: function (data) {
        alert(data);
        $('#TramsViewFrame').html(data);
    },
    error: function (jqxhr, textStatus, errorThrown) {
        $(window).hideWaitScreen();
        if (confirm(errorThrown)) { window.location.reload(); }
    }
});

});

最后下面是表单的 CSHTML。在这里,我正在从带有按钮类型提交的表单中读取文件

<form action="#" method="post" enctype="multipart/form-data" class="forms" name="form"
            id="frmvalidate">
            <table>
                <tr>
                    <td>
                        <input type='file' name='trams' id='ValidatetramsFile' />
                    </td>
                </tr>
                <tr>
                    <td>
                        <br />
                        <input name="cbDisplayUmatched" id="cbDisplayUmatched" type="checkbox" value="" checked="true" />
                        <label style="text-decoration: none; outline: none; font-size: 1.1em; padding: 3px 0 0px 0;">
                            Display rows that were <strong>NOT</strong> parsed</label>
                    </td>
                </tr>
                <tr>
                    <td>
                        <br />
                        <div class="buttons">
                            <button type="submit" value="VIEW" class="ui-state-default ui-corner-all" id="tramsView">VIEW</button>
                        </div>
                    </td>
                </tr>
            </table>
            </form>

感谢您的宝贵时间,非常感谢您的帮助。亲切的问候!!!

4

6 回答 6

14

你可以从这样的动作中返回 HTML,

return Content(html, "text/xml");
于 2012-04-29T05:35:58.347 回答
4

听起来好像您的表单仍在提交正常的回发,因此您正在进行的任何异步调用都将丢失。

尝试使用以下方法阻止默认表单提交:

$('#tramsView').live('click', function (evt) {

    evt.preventDefault();

    // ... rest of your code 

});

顺便说一句,在这种情况下,如果您所做的只是更新 html 上的 html #TramsViewFrame,您可以使用稍微简单的$.load() 方法:

$('#tramsView').live('click', function (evt) {
    evt.preventDefault();
    $('#TramsViewFrame').load('/Booking/ValidateTrams');
});
于 2012-04-29T09:22:56.993 回答
3

进行这些更改

在控制器顶部提供属性 HttpPost

[HttpPost]
public ActionResult ValidateTrams()

从控制器返回字符串作为 Json 像这样。

return Json(new { success = html });

最后将您的 dataType 从更改jsonpjson

$('#tramsView').live('click', function() {
    $.ajax({
        url: '/Booking/ValidateTrams',
        type: 'POST',
        dataType: 'json',
        success: function(data) {
            alert(data.success);
            $('#TramsViewFrame').html(data.success);
        },
        error: function(jqxhr, textStatus, errorThrown) {
            $(window).hideWaitScreen();
            if (confirm(errorThrown)) {
                window.location.reload();
            }
        }
    });
});​

PS:如果您使用的是最新版本的jQuery(1.7+),请将处理程序更改为.live处理.on程序。不是强制性的 :)

于 2012-04-29T09:22:32.680 回答
1

在您的控制器中,因为您使用的是 ajax 帖子,您需要以 JSON 格式返回,它会是这样的

return Json(html);
于 2012-04-29T05:37:57.943 回答
0

我认为这是与您的场景相关的另一种方式How can I return the HTML from MVC controller to a div in my view http://mazharkaunain.blogspot.com/2011/02/how-to-use-aspnet-mvc-javascriptresult.html

于 2012-04-29T08:27:32.757 回答
0

而不是存储在“字符串”中,而是以以下格式存储 html 代码:

        HtmlString s = new HtmlString("<html coding/>");
        ViewData["Id_as_per_your_choice"] = s;
        return View("page_you_want to_respond");

然后将 "<%: ViewData["Id_Same_as_that_in_above_code"] %>" 放置在您希望该 html 代码出现的任何位置......简单......但在 "index()" 中将 Viewdata 的初始值设为 null方法,以便代码不会出现在页面加载....

于 2015-02-07T06:48:26.923 回答