如何在编辑视图

时间:2016-09-01 20:57:53

标签: asp.net-mvc-4 linq-to-entities

问题吗

我尝试更多时间为选定的地区显示错误的城市

详情

我有区域控制器内部控制器我有编辑功能

我为区域检索所选国家和城市

在编辑视图中。

但它显示错误的城市选区

对于国家/地区,它会显示选定区域的正确国家/地区

区控制器中的

public ActionResult Edit(int id)
        {

            Destrict D = db.Destricts.Find(id);
            ViewBag.CountryId = new SelectList(db.Countries.ToList(), "Id", "CountryName", D.City.Country.Id);
            return View(D);

        }
 public JsonResult getcitybyid(int x)
        {

            var data = db.Cities.Where(a => a.CountryId == x).ToList();
            return Json(data, JsonRequestBehavior.AllowGet);
        }
in view of edit

CountryName:@Html.DropDownList("CountryId","")
City:<select id="citylist"></select>

in jquery i fill country and city using

            $("#CountryId").change(function () {


                var id = $("#CountryId").val();
                 $("#citylist").empty();
                $.ajax({
                    url: "/District/getcitybyid",
                    data: {x: id},
                    success:function(res)
                    {

                        $.each(res, function (i, e) {


                                $("#citylist").append("<option value='" + e.Id + "'>" + e.CityName + "<option>")



            $("#CountryId").change();

图像显示我有什么

get correct city for district

1 个答案:

答案 0 :(得分:0)

看看这一行

$("#citylist").append("<option value='" + e.Id + "'>" + e.CityName + "<option>")

问题是,你没有关闭option标签,而是开了一个新标签!这就是你看到两倍选项的原因,其中一半是空的显示文本。

这应该解决它(使用</option>正确关闭选项。)

$("#citylist").append("<option value='" + e.Id + "'>" + e.CityName + "</option>");

对于您的编辑屏幕,我建议您创建一个像这样的视图模型

public class EditDistrictVm
{
  public List<SelectListItem> Countries { set;get;}
  public int SelectedCountry { set;get;}
  public List<SelectListItem> Cities { set;get;}
  public int SelectedCity { set;get;}
  public string Name { set;get;}
  public int Id { set;get;}
}

并在您的EDIT操作中,将数据加载到此视图模型的对象并发送到视图。

public ActionResult Edit(int id)
{
  var vm = new EditDistrictVm { Id=id};
  var d= db.Disticts.FirstOrDefault(id);
  vm.Name = d.Name;
  vm.Countries = db.Countries
                   .Select(f=>new SelectListItem { Value=f.Id.ToString(),
                                                   Text = f.CountryName}).ToList();
  //Now get cities for the country for this district
  vm.Cities =  db.Cities
                 .Where(t=>t.CountryId==d.City.CountrId)
                 .Select(f=>new SelectListItem { Value=f.Id.ToString(),
                                                 Text = f.CountryName}).ToList();

  //Set the selected options in dropdowns
  vm.SelectedCountryId=d.City.CountrId;
  vm.SelectedCityId = d.CityId;

  return View(vm);
}

现在确保您的编辑视图强烈输入此视图模型

@model EditDistrictVm
@using(Html.BeginForm())
{
  @Html.HiddenFor(f=>f.Id)
  @Html.TextBoxFor(f=>f.Name)
  @Html.DropDownListFor(f=>f.SelectedCountry, Model.Countries)
  @Html.DropDownListFor(f=>f.SelectedCity, Model.Cities)
  <input type="submit" />
}