0

アプリケーションでレポートを表示しています。ユーザーには、レポートをフィルタリングする機能があります。フィルタ データを入力し、[Go] ボタンをクリックします。[Go] をクリックすると、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);
}

});

controller.cs

[HttpPost]
    public JsonResult ReportFilter(string parameter)
    {
        return new DBConnect().GetFilterData(parameter);
     }

以下のコードも試しました。しかし、パラメータは空です

[HttpPost]
    public JsonResult ReportFilter(FormCollection parameter)
    {
        return new DBConnect().GetFilterData(parameter);
     }

コールインアクションメソッドを取得しています。ただし、ここでは、パラメーターはシリアル化された形式になっています。しかし、それをデシリアライズすることはできません。他のフォームのコレクションを形成するためにデシリアライズするにはどうすればよいですか? 私が欲しいのは、フォーム内の入力コントロールの値を取得することだけです。

デシリアライズのために以下の2つのコードを試しました。しかし、どれもうまく機能していません。例外を取得するだけです。

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を試してください:

ファイルの挿入: 説明: ローカル:

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 に答える