MVC使用jquery更新Dropdownlistfor

时间:2011-03-04 12:07:36

标签: asp.net-mvc

我有一个Dropdownlistfor连接到我的模型。加载页面时模型为空,但我在页面上有一个更新模型的按钮。我的问题是我的下拉列表没有更新。

标记:

@Html.DropDownList("ddlRaces", new SelectList(ViewBag.Races, "RaceId", "Name"))
<input type="button" id="btnChangeRace" class="btnGo" value=" " />

@Html.DropDownListFor(m => m.Timers, new SelectList(Model.Timers, "TimerId", "StartTime"), "Velg timer:")

脚本:

btnChangeRace.click(function () {
    url = "/TimeMerger/GetTimers/?raceId=" + ddlRaces.val();
    $.get(url);
});

代码隐藏:

[HttpGet]
public ActionResult GetTimers(int raceId)
{
    var timeMergeModel = new TimeMergerModel();
    timeMergeModel.Timers = TimerModel.GetTimers(raceId);
    return View(timeMergeModel);
}

1 个答案:

答案 0 :(得分:0)

$.get(url);

这里你发送的是一个AJAX请求,但你在成功回调中什么也没做,所以什么都不会更新。甚至没有成功的回调。所以你需要定义一个成功的回调:

$.get(url, function(result) {
    // result here will represent the value returned by the server
    // which in your case is HTML. So here you might need to update 
    // the relevant portion of your page.
});

您的DropDownListFor定义也是错误的。您使用相同的模型变量作为第一个和第二个参数(Model.Timers)。此助手的第一个第一个参数应该是您要绑定的标量属性,而不是列表。它应该是:

@Html.DropDownListFor(
    m => m.SelectedTimerValue, 
    new SelectList(Model.Timers, "TimerId", "StartTime"), 
    "Velg timer:"
)

其中SelectedTimerValue将是您的视图模型上将保存所选值的属性。另外,为什么您在第一次下拉时使用DropDownList而不是DropDownListFor?视图模型的整体思想是它将包含所有必要的信息,以便视图只显示它。