2

AJAX 呼び出しから部分ビューを返していますが、レンダリングされていません。showOtherTrade 関数が呼び出されていないようです。以下のコードを参照してください。

私の見解は次のとおりです。

@model SCD.ViewModels.OtherTradesViewModel

@{
    ViewBag.Title = "Edit Other Trades";
}
<fieldset>
    <legend>Edit Other Trades for the subcontractor @Model.Subcontractor.CompanyName</legend>
    <p class="highlight">@ViewBag.Message</p>
    <p>The Primary Trade is set to @Model.PrimaryTradeName</p>

    <form method="get" action="@Url.Action("EditOtherTrades")" 
          data-scd-ajax="true" data-scd-target="#otherTradeList">
        <p>Select a trade: <input type="search" name="searchOtherTrade" id="searchOtherTrade" data-scd-autocomplete="@Url.Action("AutocompleteOtherTrade", "DataService")" style = "width: 300px;" class="submitSelection"/>
        </p>
    </form>  

    @Html.Partial("_OtherTrades", Model.OtherTrades.ToList())
</fieldset>

私の PartialView は @model IList です

<div id="otherTradeList">
    <table>
        @Html.DisplayForModel()
    </table>
</div>

そして、DisplayTemplate は次のとおりです。

@model SubcontractorTrade
<tr>
    <td>@Model.Trade.TradeName </td>
    <td><input type="button" value="Remove"/>@Html.HiddenFor(model => model.TradeId)</td>
</tr>

オートコンプリートを使用して、グリッドに追加するデータ項目に接続しています。

したがって、私のJavaScriptは次のようになります。

var showOtherTrade = function (data) {
        var $form = $(this);
        var $target = $($form.attr("data-scd-target"));
        var $newHtml = $(data);
        $target.replaceWith($newHtml);
        $newHtml.effect("highlight");
    };

    var updateAutocompleteForm = function (event, ui) {
        var $input = $(this);

        if ($input.hasClass("submitSelection")) {
            $input.val("");
            var searchId = ui.item.id;
            url = AddOtherTradeUrl;
            dataService.addOtherTrade(searchId, showOtherTrade, url);
        } 
    };

    var createAutocomplete = function () {
        var $input = $(this);

        var options = {
            source: $input.attr("data-scd-autocomplete"),
            select: updateAutocompleteForm
        };

        $input.autocomplete(options);
    };

そして、showOtherTrade 関数が呼び出されていないようです。これはおそらく私が修正する必要があるものです。

興味があれば、私のデータサービスは次のようになります。

var dataService = new function () {
    $.ajaxSetup({
        cache: false
    });
    addOtherTrade = function(searchId, callback, url) {
        $.getJSON(url,
            { searchId: searchId },
            function(data) {
                callback(data);
            });
        };

        return {
            addOtherTrade: addOtherTrade
        };
} ();
4

1 に答える 1

4

このコードは、成功または失敗した ajax 呼び出しで呼び出すことができます

$.get(action, null, function(data){
  $('#someDiv').html(data);
}, 'html');

そしてあなたのコントローラーは以下を返すことができます:

return PartialView("SomePartial", Model)
于 2013-01-11T21:57:56.283 に答える