0

我正在我的应用程序中显示一份报告。用户可以过滤报告。因此,他们输入过滤器数据并单击“开始”按钮。在“开始”单击时,我使用 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);
4

2 回答 2

2

.serialize()方法会将表单内容序列化为application/x-www-form-urlencoded编码。所以这和你从来没有使用过 jQuery 并直接将表单内容提交给服务器是完全一样的。

因此,如果您根本不使用 jQuery,您应该执行完全相同的操作 -> 使用此表单将绑定到的视图模型:

[HttpPost]
public JsonResult ReportFilter(MyViewModel model)
{
    ...
}

并假设$("#trialReportForm").serialize()返回以下内容:

foo=bar&baz=bazinga

以下是模型的外观:

public class MyViewModel
{
    public string Foo { get; set; }
    public string Baz { get; set; }
}
于 2013-08-27T16:00:47.197 回答
0

尝试 HTML:

Inserir o Ficheiro: 描述: 本地:

在 JS 中:

函数 inserirficheiro() {

    var desc = $("#inserirficheirodescricao").val();
    var local = $("#inserirficheirolocal").val();

    var formData = new FormData();

    var file = document.getElementById("files").files[0];

    formData.append("FileUpload", file);
    formData.append("desc", desc);
    formData.append("local", local);
    formData.append("id","1");

    $.ajax({
        type: "POST",
        url: "@Url.Content("~/gestaoficheiros/NovoFicheiro/")", //+ "?desc=" + desc + "&local=" + local,
        data: formData,
        cache: false,
        dataType: 'json',
        contentType: false,
        processData: false,
        success: function (data) {
            if (data.ok == true) {

            }
            else {

                return;
            }
        },
        error: function (error) {
            if (error.ok == undefined) {
                alert("Sessão Expirou");
                location.href = '@Url.Content("~")';
                return;
            }
            alert("!Erro, resposta do Servidor: " + error.responseText);
        }
    });

}

在 MVC 中

    [HttpPost]
    public JsonResult NovoFicheiro(int id, string desc, string local, HttpPostedFileBase FileUpload)
    {
       // See de values....

        return Json(new  { ok = true, message = "", }, JsonRequestBehavior.AllowGet);
    }
于 2014-12-23T14:30:48.767 回答