2017-06-14 10 views
1

@ Html.Raw(@ Url.Action())にJavascriptリストオブジェクトを渡すにはどうすればよいですか?@ Html.Raw(@ Url.Action())のJavascriptリストオブジェクトを渡す方法は?

私はjs Listオブジェクトとして次のプロパティを持つモデルを自分のコントローラに持っています。

コントローラのメソッドでこのモデルが必要です。

public ActionResult ExportDataExtReport(DataExtractionReportModel DataExtReportModel) 

呼び出しは、オブジェクトによってコントローラに到達ヌルである

ReportModel.push({ 
     ReportId : ReportSelID, 
     ReportName : "DataExtraction", 
     StartDate : DEYearSelID, 
     CategoryId : DataExtCategoryId, 
     SurveyId : QuestionnaireSelID, 
     SurveyName: QuestionaireName, 
     OperationalUnits : DataExtOpUnit 
    }); 

    var link = '@Html.Raw(@Url.Action("ExportDataExtReport", "Location", new { DataExtReportModel = -1}))'; 
    link = link.replace("-1", ,ReportModel[0]); 
    window.location.href = link; 
+0

GETを作成します。それぞれの名前/値のペアをクエリ文字列またはルート値として渡す必要があります –

+0

通常、JSON.stringify(ReportModel [0])を使用します(Ajax呼び出しでビューを返します)。しかし、この場合は、window.locationを使用する必要があります。href、私はExcelファイルを生成する必要があります。私のモデルがいくつかのプロパティを持つことができるので、各名前/値のペアを渡すこととは別の方法がありますか? –

+0

'$ .param()'メソッドを使って簡単にすることができます。しかし、オブジェクトを生成して配列にプッシュする理由は明確ではありません。値からクエリー文字列を生成するだけのコードは少なくなります。そして、あなたはすべてのプロパティの値が何であるかを見せていません( 'OperationalUnits'はコレクションを示唆していますので、あなたがそれを示しても動作しません) –

答えて

0

ASP.NET MVCは非常に強力理解JSONデータオブジェクトです。

それが最善の方法だ場合、私は知らないが、私は、私はそれらを管理する方法を教えてくれます:

新しいコントローラに提出する前に、私は保存私は、クライアントコードでのJSONデータオブジェクトを持っていますそれは隠された入力で文字列化されます。

次に、フォームを送信します(どのアクションがコントローラーメソッド呼び出しです)。今、私のコントローラはフォームオブジェクトを受け取りますが、そのパラメータの1つは文字列化されたJSONオブジェクトです。

私は通常、コントローラに到達するJSONデータパッケージのデータ構造と互換性のあるデータ構造を持つビジネスモデルクラスを持っています。 JSONシリアライザを使用して結果をそのモデルクラスの型にキャストすると、パッケージ日付がビジネスモデルクラスのインスタンスに読み込まれます。

ホープこれはあなたのコメントを1として

+0

OPはPOSTではなくGETを行います。 –

+0

POSTで試してみませんでしたが、理論的にはうまくいくはずです。 – Bardo

+0

何ですか?ここでも、問題は 'location.href'を使ってGETを作ることです - フォームと隠された入力は適用できません。これは質問とは関係ありません。 –

0

を支援します。

は私のモデルとしてそれぞれの名前/値のペアを渡すから離れて他の方法はありますいくつかのより多くの特性に

を持つことができそうな方法があります、つまり、あなたは自分の既存のモデルにRouteValueDictionaryプロパティを追加し、以下のようにこれらの値を送信することができます

関連例:

public class MyViewModel 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public bool IsPeriod { get; set; } 

    public RouteValueDictionary RouteValues 
    { 
     get 
     { 
      var rvd = new RouteValueDictionary(); 
      rvd["name"] = Name; 
      rvd["surname"] = Surname; 
      rvd["isPeriod"] = IsPeriod; 
      return rvd; 
     } 
    } 
} 

次に、Url.Action()呼び出しでRouteValuesプロパティを使用できます。

<img src="@Url.Action("DisplayData", "Home", Model.RouteValues)" alt="Image" /> 

またはあなたが少ない(明示的な)コードを好む場合は、モデルの変更を無視し、単にこれを実行します。

<img src="@Url.Action("DisplayData", "Home", new RouteValueDictionary(Model)" alt="Image" /> 

出典:

https://stackoverflow.com/a/13088972/3397630が、それは参考になりましたホープ

ありがとう

Karthik

+0

私は、OPがモデルの元の値をサーバに送り返したいと真剣に疑っています(ちょっと無意味です) –

関連する問題