0

在我的应用程序中,我有两个下拉列表。第一个显示国家值,第二个显示所选国家的状态。这些值会生成并显示在两个下拉列表中。但是在发布时,两个下拉列表都返回模型值的 id,而不是名称或值。如何在帖子上绑定下拉列表的选定项目文本?模型 :

public string State { get; set; }
public string Country { get; set; }
public SelectList CountryList { get; set; }
public SelectList RegionList { get; set; }
public class Countries
{
   public string ID { get; set; }
   public string Name { get; set; }
}
public class Region
{
   public string ID { get; set; }
   public string Name { get; set; }
}

看法

@Html.DropDownListFor(model =>model.State, new SelectList(Model.RegionList, "Value", "Text", Model.RegionList.SelectedValue))      
@Html.DropDownListFor(model => model.Country, new SelectList(Model.CountryList, "Value", "Text", Model.CountryList.SelectedValue), new { data_url = Url.Action("GetRegionDetail", "WPindex") })


<script type="text/javascript">
            $(document).ready(function () {
                $("#Country").change(function () {                
                    $("#State").empty();       
            var url =$(this).data(url);
            var Id = $('#Country option:selected').attr('value');
                    $.getJSON(url, { ID: Id },
                        function (data) {
                            jQuery.each(data, function (key, Region) {
                                $("#State").append($("<option></option>").val(Region.ID).html(Region.Name));
                            }
                            );
                        });
                });
        });
</script>

控制器 :

 public JsonResult GetRegionDetail(int ID)
    {
        AddressModel amodel = new AddressModel();
        List<Model.Region> objRegion = new List<Model.Region>();
        objRegion = GetRegionList(ID);
        SelectList objlistofRegiontobind = new SelectList(objRegion, "ID", "Name", 0);
        amodel.RegionList = objlistofRegiontobind;
        return Json(objRegion, JsonRequestBehavior.AllowGet);
    }
[HttpPost]
public ActionResult UpdateDetails(Model objmodel)
{
    string state   = objmodel.State; // returns ID and not Name (selected text)
    string country = objmodel.Country; // returns ID and not Name 
}
4

2 回答 2

1

这不是问题。您希望 DropDownList 为您提供选定的值,在这种情况下是 ID,而不是文本。因此,我建议您使用以下内容更改 ViewModel 的属性:

public int StateID { get; set; }
public int CountryID { get; set; }
public SelectList CountryList { get; set; }
public SelectList RegionList { get; set; }

但是,如果您不想要 ID,您可以像这样定义 DropDownLists:

@Html.DropDownListFor(model => model.State, new SelectList(Model.RegionList, Model.State))      
@Html.DropDownListFor(model => model.Country, new SelectList(Model.CountryList, Model.Country), new { data_url = Url.Action("GetRegionDetail", "WPindex") })
于 2013-08-06T15:19:32.387 回答
1

当您在 Html 中定义下拉列表时,每个下拉列表option都有一个属性,value并且texttext值显示给用户,并且value是该下拉列表的“选定值”。将表单发布到控制器时,仅发布表单value。如果您希望使用名称而不是 Id 来发布,只需将value下拉列表项的属性设置name为源数据的属性即可。

例如,当您填充状态下拉列表时,您可以这样做:

$("#State").append($("<option></option>").val(Region.Name).html(Region.Name));
于 2013-08-06T15:11:34.033 回答