2015-12-11 66 views
0

我正在修改一个预先存在的应用程序。我正在尝试添加jquery自动完成功能。我有它的工作和调用控制器,但问题是输入字段中的名称属性是“someClass.someMethod”,因为我不能把它放在这样的控制器参数中,但仍然想要满足asp.net的模型绑定规则,我该怎么办?asp.net MVC自动完成与Html.TextBoxFor

控制器:

 public JsonResult GetPs(string pN, PSModel pS) 
    { 
     List<string> pNs = null; 

     pNs= pS.PEntryBL.BusinessLayerPS.PS 
         .Where(x => x.Text.StartsWith(pN)).Select(y => y.Text).ToList(); 

     return Json(pNs, JsonRequestBehavior.AllowGet); 
    } 

查看:

 $(function() { 
     $("#autoCompletePNBox").autocomplete({ 
      source: '@Url.Action("GetPs", "PS", new {pS = @Model})' 
     }); 
    }); 

形式:

  @Html.Label("Scan PN: ", new { @class = "DFont"}) 

     @Html.TextBoxFor(r => r.PEntryBL.PS, new { @class = "pageFont", id = "autoCompletePNBox" }) 
+0

[覆盖名称属性](http://stackoverflow.com/questions/6057865/asp-net-mvc-3-override-name-attribute-with-textboxfor)。 – Jasen

+0

当通过自动完成发现正确的名称,然后提交,将搞砸模型绑定。 – eaglei22

+0

你试图绑定什么模型? – Jasen

回答

0

使用This Post

我能得到它的工作通过抓取的价值日e输入字段并在每个函数调用中传递它(或每次用户输入字符时)。

现在,当用户从自动完成列表中选择项目并选择提交时,框架在后台形成模型绑定仍然会像最初实现的那样工作。

这里是jQuery代码变化:

 <script type="text/javascript"> 
      $(function() { 
       var src = '@Url.Action("GetPs", "PS", new {pS = @Model})' 
       $("#autoCompletePNBox").autocomplete({ 
        source: function (request, response) { 
         $.ajax({ 
          url: src, 
          dataType: "json", 
          data: { 
           pN: $("#autoCompletePNBox").val() 
          }, 
          success: function (data) { 
           response(data); 
          } 
         }); 
        } 
       }); 
      }); 

我不知道这一点就如同我的jQuery的技能不是很强。希望这有助于某人。