我仍在学习Jquery,并且对自己手中的任务有些困惑。
看起来像一个简单的任务…我有一个框,想要在单击时填充“选项”。我不希望仅在有人真正要求查看列表时在页面加载时填充它。同样,它只需填充一次。我真的不希望有人每次扩大名单时都发出请求。
我想我的Select元素中可能会有一个函数调用
<select id="usersList" name="usersList" onclick="getUsers()">
然后让一个Javascript getUsers()函数调用我的Json GetUsers()ActionMethod来获取该列表。怎么样 ?
就像是…?
function getUsers() { getJSON("/Users/GetUsers", null, function (data){} }
还是JQuery?…
$("usersList").click( $.getJSON("/Users/GetUsers", null, function (data) {} )
但是,我需要帮助,将所有内容放在一起。先感谢您!
这是我用来填充选择框的JavaScript。
$.getJSON("/Users/GetUsers", null, function(data) { $("#UsersList option").remove(); // Remove all <option> child tags. $.each(data.Users, function(index, item) { // Iterates through a collection $("#UsersList").append( // Append an object to the inside of the select box $("<option></option>") // Yes you can do this. .text(item.Description) .val(item.Id) ); }); });
我建议您在页面加载时而不是在用户单击选择框时触发此操作。jQuery AJAX默认情况下是异步的(应该是异步的),因此有一两分钟的选择框为空,这可能会使用户感到困惑。
这是您的问题范围吗?还是在MVC方面也需要帮助?如果您使用的是ASP.Net MVC,则实际上是JsonResult的特定结果类型,这使创建JSON控制器方法更加简单,因为它们不需要相应的视图。它还允许您使用匿名数据结构,这使方法特定的投影更加简单。
编辑 这是返回上面的jQuery代码将理解的JSON结构的基本方法。请注意,属性u.Username和u.ID取决于您的Users对象。
u.Username
u.ID
[HttpPost] public JsonResult GetUsers() { return Json(new { Users = from u in _usersRepository.Get() select new { Description = u.Username, ID = u.ID } }); }
但是,我建议您尽快放弃这种方法,并使用标准的JSON消息结构。我使用的是这样的:
{ Success: bool, LoggedIn: bool, ClientErrors: [ { Number: int, Description: string, Parameter: string }, { Number: int, Description: string, Parameter: string }... ], ServerErrors: [ { Id: int, Message: string }, { Id: int, Message: string }... ], Data: {} }
这样做的原因如下:
绝不要你考虑我的结构 的 做到这一点的方式。显然,您的应用程序需求可能与我的有很大不同。一致性,比任何特定的结构都重要。
编辑:06/01/2016- 看到人们仍然在看这个答案。关于填充下拉列表,我建议研究使用双向绑定框架。我个人更喜欢Knockout.JS,尽管Angular.JS也能做到,但它是如此的轻巧和轻便。除此之外,此答案的其余部分仍然是最新的。
编辑:2016 年8月10日-代码缺少逗号。