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 を更新する#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 を から に変更しjsonpますjson

$('#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 に答える