我正在我的应用程序中显示一份报告。用户可以过滤报告。因此,他们输入过滤器数据并单击“开始”按钮。在“开始”单击时,我使用 jQuery 将整个表单传递给控制器操作。我想根据表单集合中控件的值从数据库中读取数据并将数据传递回表单,并且需要使用新数据重新加载报表。
我尝试了以下代码。
.cshtml
<script type="text/javascript">
$(document).ready(function () {
$('#action_button').click(function () {
//$('#trialReportForm').attr("action", '@Url.Action("ReportFilter", "MyController")');
//$('#trialReportForm').submit();
// While using above two commented lines instead of the below codes, I get the form collection correctly. BUt I cannot pass back the new data to the form. If this is the solution.. How can I pass the data back to form to reload the report?
var formElements = $("#trialReportForm").serialize();
//var data = { "parameter": $.toJSON(formElements) };
var data = { "parameter": formElements };
$.ajax({
url: @Url.Action(ReportFilter", "MyController"),
type: 'POST',
data: data,
dataType: 'json',
success: OnSuccess,
error: OnFailure
});
});
function OnSuccess(result)
{
alert(result);
}
function OnFailure(result)
{
alert(result);
}
});
控制器.cs
[HttpPost]
public JsonResult ReportFilter(string parameter)
{
return new DBConnect().GetFilterData(parameter);
}
我也试过下面的代码。但是参数为空
[HttpPost]
public JsonResult ReportFilter(FormCollection parameter)
{
return new DBConnect().GetFilterData(parameter);
}
我正在调用行动方法。但是这里的参数是某种序列化的形式。但不能反序列化它回来。我怎样才能反序列化它以形成其他形式的集合。?我想要的只是在表单中获取输入控件的值。
我尝试了以下两个反序列化代码。但它们都没有正常工作。只有得到例外。
1: var serializer = new JavaScriptSerializer();
var jsonObject = serializer.Deserialize<FormCollection>(parameter);
2: var request = JsonConvert.DeserializeObject<FormCollection>(parameter);