在“更新”视图中,如果所选字段在viewmodel中可为空,则不会设置下拉列表选定值

时间:2014-05-01 20:12:16

标签: asp.net-mvc-4 razor html.dropdownlistfor

比方说我的viewmodel如下:

public class MyViewModel
{
    public int? SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; } 
}

观点如下:

 @model MyViewModel

    @Html.DropDownListFor(
        x => x.SelectedCategoryId,
        Model.Categories,
        "--Select--"
    )

在更新视图中,如果模型具有SelectedCategoryId的值,则在下拉列表中未显示该值。 &#34; - 选择 - &#34;总是被选中。如果其Id字段不可为空,则相同的逻辑适用于其他下拉列表。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

建议你一个简单的方法 如果您使用IEnumerable <SelectListItem>,则无需为维护选定值使用不同的变量。只需在填充Categories SelectList时选择您的类别。

SelectListItem category = new SelectListItem
            {
                Text = "CategoryId",
                Value = "CatagoryName",
                Selected = true
            };

Categories.Add(category);

public class MyViewModel
{
    public IEnumerable<SelectListItem> Categories { get; set; } 
}  

.............................................. < / p>

@model MyViewModel

@Html.DropDownList("Name",
    Model.Categories,
    "--Select--"
)

答案 1 :(得分:0)

最后,如果Id有值,我使用jquery来选择下拉列表。

在视图中,我创建了一个隐藏字段(不要使用@ Html.HiddenFor)

 @Html.Hidden("SelectedCategorySubId", Model.SelectedCategorySubId.GetValueOrDefault(), new { @id = "hdnSelectedCategorySubId" })

在JS文件中,在ajax调用的回调方法中(加载下拉列表),在向下拉列表中添加数据后,获取隐藏字段值,然后在下拉列表中选择该值。

 $.ajax({
            type: 'POST',
            url: "GetSubCategory",
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: JSON.stringify(param),
            success: function (subCategoryList) {

                if (subCategoryList != null && subCategoryList != '') {

                    $("#SelectedCategorySubId").append('<option>--- Select ---</option>');
                    $.each(subCategoryList, function (i, subCategory) {

                        $("#SelectedCategorySubId").append($('<option/>', {
                            value: subCategory.Value,
                            text: subCategory.Text
                        }));
                    });

                 //Set selected value from hidden field
                    var selectedCategorySubId = $("#hdnSelectedCategorySubId").val();
                  // alert("Sub Cat" + selectedCategorySubId);
                    $("#SelectedCategorySubId").val(selectedCategorySubId);

                }//end if
                else {
                    //alert("empty subcategoryList " + subCategoryList);
                    $("#tdSubCategory").hide();

                }
            }

如果下拉列表更改

,则更新隐藏字段
//Update hidden field, if cat changes
$("#SelectedCategorySubId").change(function () {
    $("#hdnSelectedCategorySubId").val($(this).val());
});

我希望这有助于某人。