在控制器端获取 Json 数据的空值
Getting null for Json data on controller side
我有这个html
<form action="/Cabinet/Inbox" id="frmCabinet" method="post"/>
<input type="hidden" id="hdnSearchOptions" name="searchOptions" />
<input onclick="inbox()"/>
</form>
我有一个函数,可以从各种 DOM 元素中收集信息并将它们存储在包装器对象中,然后执行提交:
function inbox(){
searchOptions={};
searchOptions.SearchText=$('#txtSearch').val();
$('#hdnSearchOptions').val(JSON.stringify(searchOptions));
$('#frmCabinet').submit();
}
服务器端收件箱方法如下:
public ActionResult(SearchOptions searchOptions){
//code goes here
}
public class SearchOptions{
public string SearchText{get;set;}
//some more properties
}
提交时,searchOptions
参数为空。我尝试将表单的 enctype 设置为任何可能的值,我什至尝试 appication/json
按照 this W3C document 无济于事。当我在提交之前查看隐藏元素的值时,我看到它是这样的:
<input type="hidden" id="hdnSearchOptions" name="searchOptions" value="{"SearchText":""}">
因此生成的 JSON 字符串似乎没问题。我还缺少什么?或者这根本不可能?
好的,这就是我最后做的。在确保无法使用普通表单提交进行表单编码 "application/json" 之后(与人们在许多 SO 线程中所说的相反)我决定使用 Request.Form 来访问构造的 json 对象在客户端。正如@Stephen Muecke 所说,我可以选择将所有输入值作为参数提供,但是有许多字段的方法,我不想用很多参数弄乱我的操作方法。实际上有一个比其他方法更好的方法,那就是将它传递到 ViewModel 中,但问题是,在我的情况下我不能这样做,因为我无法将单独的 ViewModel 传递到 _layout(master) 页面。所以最后是代码:
public ActionResult(){
var searchOptionsJson = Request.Form["searchOptions"];
if(!string.IsNullOrEmpty(searchOptionsJson))
SearchOptions searchOptions = JsonConvert.DeserializeObject<SearchOptions>(searchOptionsJson);
}
我有这个html
<form action="/Cabinet/Inbox" id="frmCabinet" method="post"/>
<input type="hidden" id="hdnSearchOptions" name="searchOptions" />
<input onclick="inbox()"/>
</form>
我有一个函数,可以从各种 DOM 元素中收集信息并将它们存储在包装器对象中,然后执行提交:
function inbox(){
searchOptions={};
searchOptions.SearchText=$('#txtSearch').val();
$('#hdnSearchOptions').val(JSON.stringify(searchOptions));
$('#frmCabinet').submit();
}
服务器端收件箱方法如下:
public ActionResult(SearchOptions searchOptions){
//code goes here
}
public class SearchOptions{
public string SearchText{get;set;}
//some more properties
}
提交时,searchOptions
参数为空。我尝试将表单的 enctype 设置为任何可能的值,我什至尝试 appication/json
按照 this W3C document 无济于事。当我在提交之前查看隐藏元素的值时,我看到它是这样的:
<input type="hidden" id="hdnSearchOptions" name="searchOptions" value="{"SearchText":""}">
因此生成的 JSON 字符串似乎没问题。我还缺少什么?或者这根本不可能?
好的,这就是我最后做的。在确保无法使用普通表单提交进行表单编码 "application/json" 之后(与人们在许多 SO 线程中所说的相反)我决定使用 Request.Form 来访问构造的 json 对象在客户端。正如@Stephen Muecke 所说,我可以选择将所有输入值作为参数提供,但是有许多字段的方法,我不想用很多参数弄乱我的操作方法。实际上有一个比其他方法更好的方法,那就是将它传递到 ViewModel 中,但问题是,在我的情况下我不能这样做,因为我无法将单独的 ViewModel 传递到 _layout(master) 页面。所以最后是代码:
public ActionResult(){
var searchOptionsJson = Request.Form["searchOptions"];
if(!string.IsNullOrEmpty(searchOptionsJson))
SearchOptions searchOptions = JsonConvert.DeserializeObject<SearchOptions>(searchOptionsJson);
}