MVC:在编辑时设置自动完成的值

时间:2009-05-14 01:04:06

标签: model-view-controller autocomplete model edit

在我们的MVC应用程序中,我们在几个页面上使用jQuery自动完成控件。这在Create上运行正常,但我无法在Edit上运行。

实际上,我不知道如何使自动完成控件从模型预加载数据,并且在用户想要更改值时仍然表现为自动完成。

另外,我如何确保该值以Create调用中使用的相同格式显示?

我们所有的自动完成控件都有相应的控制器,所有解析Json结果。

1 个答案:

答案 0 :(得分:0)

我们来试试吧!好吧这样做: 假设您有一个需要过滤的国家/地区列表 默认情况下,“自动完成”会知道某些默认设置,但是假设您确实需要CountryName,并且您知道每个按键都会对您指定的URL执行ajax调用。 创建一个像这样的动作方法:

  public ActionResult LookupCountry(string q, int limit)
  {
      var list = GetListOfCountries(q, 0, limit);
      var data = from s in list select new {s.CountryName};
      return Json(data);
  }

这是Jquery:

$(document).ready( function() {
  $('#txtCountryName').autocomplete('<%=Url.Action("LookupCountry", "MyController") %>', {
      dataType: 'json',
      parse: function(data) {
          var rows = new Array();
          for(var i=0; i<data.length; i++){
              rows[i] = { data:data[i], value:data[i].CountryName,          result:data[i].CountryName};
          }
          return rows;
      },
      formatItem: function(row, i, n) {
          return row.CountryName;
      },
      width: 300,
      mustMatch: true,
  });
});

这是Html

<html><head></head><body>@Html.TextBox("txtCountryName",Model.CountryName)</body></html>

基本上,神奇的是对LookUpCountry的调用 GetCountriesList(字符串查询,int startindex,int limit) 返回MyCountries.Where(c => c.CountryName.SubString(startindex, limit).Contains(query)).ToList();

因此,您正在制作自己的修剪功能,因为JQuery不知道CountryName是什么或如何修剪它。如果它是一个javascript对象,我不太确定,但

var jsonString = @Html.GetListOfCountries() //Or Model.Countries.ToJSONString()  
var json = JSON.stringify(jsonString); //also JSON.Parse(jsonString) if stringify won't work

将返回必要的国家/地区作为Html Helper Extension方法。也许作为一个javascript对象列表,它足够聪明,可以用它的母语处理它。然而,第一种方法对我有用。