2016-07-06 12 views
0

AJAX呼び出しのURLにあるコントローラのパラメータとして文字列を別のビューに渡そうとしています。コントローラで(int?id)を渡すときと同じヌル可能な機能を持たせたいが、その代わりに文字列にしたい。ここに私のコードは次のとおりです。ASP.NET MVC AJAX呼び出しを使用してコントローラに文字列を渡す

別のビュー:

$.ajax({ 
    url: "Save/"+string 
}).done(function (data) { 
    $('body').append('<p>Query was successfully saved to the database.</p>'); 
}); 

コントローラー:

public ActionResult Save(string? data) 
    { 
     if(data == null) 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     return View(data); 
    } 

Saveのためのビューが、私はちょうど渡された文字列を印刷しようとしている、それは事実上何もしています。すなわち、あなたはパラメータの型宣言の後?を必要としない、

答えて

3

まず、stringはクラスであるので、それはNULLにすることはできません。

public ActionResult Save(string data) 

正しいURLを必要とし、このメソッドにアクセスするために。あなたはコントローラの名前を書きませんでしたので、私はそれがSomeControllerと仮定します。また、デフォルトのMVCルートを使用しているとします。つまり、カスタムMVCルートはありません。これらの仮定が有効であれば、あなたが必要とするURLは次のとおりです。

url: "/some/save/?data=yourvalue" 

のは、それを打破してみましょう:あなたのコントローラの名前のための

  • someスタンド、言葉Controllerせず、そうSomeControllerはURLでsomeになります。
  • saveは、お使いのメソッドの名前です。
  • dataは、このメソッドのパラメータの名前です。デフォルトの経路はURLの3番目の部分としてパラメータidを持っていますが、パラメータはdataとなっていますので、クエリ文字列として渡す必要があります。
  • yourvalueは、メソッドに渡される値です。

UPDATE:コメントで言及されたもう一つの問題は、パラメータ値で提供されているビューを探しているその文

return View(data); 

です。これは、string型の単一パラメータを持つメソッドViewのオーバーロードが、パラメータとして渡されたビューをレンダリングしようとしているためです。

問題を修正するには、2つのパラメータでオーバーロードを使用し、最初のパラメータとモデルの第二のようにビューの名前を渡す必要があります。nullにすることはできません間違いなく参照型として

return View("Save", data); 
+0

文字列が、彼はそれが必要な場合は、デフォルトのパラメータとして 'Save(string data = string.empty)'を使用することができます –

+0

@JasonRoner文字列はnull可能ではないと言っていたのは、 'Nullable 'は ' 'string'は' struct'ではなく 'class'であるため、文' string? 'は無効になります。 'string'の場合は、単純に' null'を渡すことができます。これはしばしばコード内で特別な処理を必要とします。 – dotnetom

+0

これは私のために働いていない、それはまだ私は 'データ'のために入れた値のためのビューを見つけることを試みている –

関連する問題