Nei*_*l N 1 javascript asp.net jquery json asp.net-mvc-3
我试图将选择列表中的所有项目提交给MVC 3操作方法.这是我的Action方法:
[HttpPost]
public ActionResult SaveList(int SettingID, List<SelectListItem> items)
{
// blah...
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试发送数据的简化版本:
var items = $("#listItems > option").map(function ()
{
var arr = [];
arr.push({ Value: $(this).val(), Text: $(this).text() });
return arr;
}).get();
$.ajax({
type: "POST",
url: "/CompanyAdmin/SaveSettingList/",
dataType: 'json',
data: { items: items, SettingID: SettingID},
success: function (msg)
{
alert(msg);
}
});
Run Code Online (Sandbox Code Playgroud)
设置ID参数正确填充.并且List将使用正确的AMOUNT项填充,但Text和Value属性都将显示为null.
我是否必须为jQuery安装一个JSON插件才能提交一系列项目?
编辑1:
按照Darin Dimitrov的建议,我使用了stringify方法,并将SettingID和选项列表作为JSON发送.
起初这不是我的Action方法,所以我将方法更改为:
public ActionResult SaveList(SaveSettingListModel json)
{}
Run Code Online (Sandbox Code Playgroud)
将param定义如下:(以匹配JSON)
public class SaveSettingListModel
{
public int SettingID { get; set; }
public List<SelectListItem> items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这现在激发了正确的方法.但是,服务器端的json的内容是SettingID = 0(当我在客户端验证它是2时),items = null.
尝试将它们发布为JSON.
首先定义视图模型:
public class MyViewModel
{
public int SettingID { get; set; }
public List<SelectListItem> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后修改您的控制器操作以将此视图模型作为参数:
[HttpPost]
public ActionResult SaveList(MyViewModel model)
{
// blah...
}
Run Code Online (Sandbox Code Playgroud)
最后在你的脚本中:
var items = $('#listItems > option').map(function ()
{
var arr = [];
arr.push({ value: $(this).val(), text: $(this).text() });
return arr;
}).get();
$.ajax({
type: 'POST',
url: '/CompanyAdmin/SaveSettingList/', // <-- use an URL Helper to generate this url instead of hardcoding it or you will cry when you deploy your application into a virtual directory
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
items: items,
settingID: SettingID
}),
success: function (msg) {
alert(msg);
}
});
Run Code Online (Sandbox Code Playgroud)
如果您想JSON.stringify在旧版浏览器中使用该方法,而不是本机支持,请确保包含json2.js脚本.
所有这一切都说我看到你在这个控制器动作的位置和这个AJAX请求,我必须说我不会这样做(在请求中发送选项).我的意思是为了渲染这个视图,你从某个地方获取了这个列表?大概是一个数据存储区?因此,不要与HTML <form>(在提交时仅将下拉列表的选定值发送到服务器)进行斗争,为什么不在SaveList操作中使用这个相同的数据存储来获取那些相同的选项?这样可以避免绕过它们并节省带宽.不要担心数据库很快.如果它们不在您的情况下,只需缓存昂贵查询的结果.
如果这些选项在客户端可能会发生更改并且您想要获取新值,请完全忽略我之前的注释.
| 归档时间: |
|
| 查看次数: |
2577 次 |
| 最近记录: |