MVC3 Razor条件加载

时间:2011-09-20 08:28:29

标签: asp.net-mvc-3 combobox razor

我想实现以下内容: 组合框/ DropDownListFor在视图中命名为“target”。它包含(例如)A和B作为选择。 在同一视图中,我有另一个名为“medium”的组合框。其含量取决于所选择的目标,例如: - 如果target =“A”,组合框“medium”将显示1和2作为选择。 - 如果target =“B”,组合框“medium”将显示3和4作为选择。

我已成功实现了组合框“目标”,但我不知道如何实现与“目标”相关的组合框“中”。如果我没有错,那么逻辑应该是:获得所选择的目标 - >找到与targetid相关的所有媒介 - >用结果填充combobox“medium”。

以下是我当前视图的片段(组合框“目标”):

<div class="editor-label">
     @Html.LabelFor(model => model.TargetId)
</div>
<div class="editor-field">
     @Html.DropDownListFor(model => model.TargetId, (ViewData["targets"] as SelectList).MakeSelection(Model.TargetId))
</div>
提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用第一个drop的javascript OnChange进行ajax调用,以根据选项A或B获取值。

然后使用您从控制器获得的JSon响应,您填写下拉列表“Medium”

JS文件中的

执行以下操作:

$(document).ready(function () {
  $("#target").change(function () { GetMediumValues("#target", "#medium"); });
});

function ClearDrop(objSource) {
   $(objSource).empty();
}

function GetMediumValues(objSource, objDest) {
var url = '/mySite/GetMediumValues/';
$.getJSON(url, { id: $(objSource).val() }, function (data) {
    ClearDrop(objDest);
    $.each(data, function (index, optionData) {
        $(objDest).append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>");
    });
});

}

在控制器中

public ActionResult GetMediumValues(string id)
{
  int myId = 0;
  int.TryParse(id, out myId);
  var select = new SelectList(repository.GetMediumValues(myId), "Id", "Name");
  return Json(select, JsonRequestBehavior.AllowGet); //allow get needed to allow get calls 
}