0

我的 DropDownListFor 看起来像:

@Html.DropDownListFor(
        m => m.CampaignID,
        new SelectList(Model.Campaigns, "ID", "Name"),
        "---Geen---",
        new {
            id = "campaignDdl",
            data_url = Url.Action("CampaignChosen", "Nomination")
        }
    )

我的 onchange javascript 看起来像:

$(function () {
    $('#campaignDdl').change(function () {
        //alert('Template knop geklikt');
        var $campaignDdl = $('#campaignDdl');
        var selCampID = $campaignDdl.val();
        var url = $campaignDdl.data('url');
        $.post(url, { selectedCampaignID: selCampID }, function (data) {
            $('#campaign').html(data);
        })
    .fail(function (jqxhr) { alert(JSON.stringify(jqxhr)); });
    });
});

我的 CampaignChosen 操作如下所示:

    [AcceptVerbs("POST")]
    public ActionResult CampaignChosen(string selectedCampaignID) {

        if (!string.IsNullOrEmpty(selectedCampaignID)) {
            int campaignID = Convert.ToInt32(selectedCampaignID);
            Models.Campaign campaign = Models.Campaign.GetCampaignByID(campaignID);

            return PartialView("ShowCampaignOverview", campaign);
        } else {
            return PartialView("ShowCampaignOverview", null);
        }

    }

如您所见,我正在传递部分视图。javascript 确保视图被放入一个 id = "campaign" 的 div 中。这个 div 是在你之前看到的下拉列表下定义的,如下所示:

<div id="campaign"></div>

选择一个项目后,一切正常。再高兴不过了。但是当您在浏览器上按重新加载时,所选项目仍显示在下拉列表中,但我不知道如何再次在该 div 中加载正确的局部视图。因为我对 MVC 还是有点陌生​​。

谁能指出这通常在 MVC 中是如何完成的?预先感谢您的回答。

4

4 回答 4

1

我建议您使用$.load()而不是 $.post() 关于将新的加载代码块放入函数并在页面加载时调用 onece 以及在事件触发时调用一次。

$(document).ready(function() {
    $('#campaignDdl').change(function () {
      loadCampaignById();
    .fail(function (jqxhr) { alert(JSON.stringify(jqxhr)); });
    });

   loadCampaignById();
});

function loadCampaignById()
{
   var $campaignDdl = $('#campaignDdl');
   var selCampID = $campaignDdl.val();
   var url = $campaignDdl.data('url');
   $('#campaign').load(url + "/" + selCampID));
})
于 2013-08-23T13:18:59.063 回答
1

您可以模仿 jquery.ready 函数的 onchange 函数:

$(document).ready(function() {
  //alert('Template knop geklikt');
    var $campaignDdl = $('#campaignDdl');
    var selCampID = $campaignDdl.val();
    var url = $campaignDdl.data('url');
    $.post(url, { selectedCampaignID: selCampID }, function (data) {
        $('#campaign').html(data);
    })
});

这应该与 ddl 更改时完全相同,但取而代之的是已经选择的值并将相应的视图放入 div 中。

于 2013-08-23T13:09:07.013 回答
1

您也可以只调用 change 方法以免重复代码,如下所示:

$(function () {
    $('#campaignDdl').change(function () {
        //alert('Template knop geklikt');
        var $campaignDdl = $('#campaignDdl');
        var selCampID = $campaignDdl.val();
        var url = $campaignDdl.data('url');
        $.post(url, { selectedCampaignID: selCampID }, function (data) {
            $('#campaign').html(data);
        });
    })
    .fail(function (jqxhr) { 
        alert(JSON.stringify(jqxhr)); 
    })
    .change();
}); 
于 2013-08-23T13:14:45.023 回答
1

尝试这个,

$(document).ready(function() {
  //alert('Template knop geklikt');
    var $campaignDdl = $('#campaignDdl');
    var selCampID = $campaignDdl.val();
    var url = $campaignDdl.data('url');
    $.post(url, { selectedCampaignID: selCampID }, function (data) {
    $('#campaign').html('');            
    $('#campaign').append(data.Data);
        })
    })

;

于 2013-08-23T13:17:39.833 回答