より良いモデルにオブジェクトをマッピングします
public ActionResult Index(PeopleObject uniqueObjectName)
{
return View();
}
コントローラのパラメータ名とjqueryの変数名が同じで予告... $.ajax
に直接url
を渡すのではなく、別の方法でクエリを作成し、必要に応じて変更してください。 本質的には、@Html.RouteUrl
メソッドのかみそり生成URLをJavaScript変数に保存します。次に、クエリ文字列を追加します。
この場合、クエリ文字列には動的値が含まれているため、プレースホルダ変数にリストされている必要があるすべてのリクエストにリストされないものもあり、それに従って値を置き換えます。
これを実行した後は、クエリ文字列をベースURLに追加して$.ajax
に入力するだけです。
次の例を見てください(実際に動作するには、フィドルリンクが含まれています)。生成されたURL @Route.Url
をurl
変数に格納します。私はまたkeys
テーブルのモデルのすべてのキーを宣言し、同様に値を置き換えるためにplaceholder
文字列を定義しました。
(値はその特定のプロパティに設定されていない場合)、私はちょうど私の
data
オブジェクト(そこから、あなたの動的な値を取得する)または空の値を持つすべての
{key}=${placeholder}
出現を置き換える
fixPlaceholder
方法で
。
最後に、url
にplaceholder
を追加して$.ajax
に渡します。あなたのようなものを持つことができ、あなたのクライアントコードについては
[HttpGet]
public JsonResult GetModelAction(SampleViewModel model) {
// Your code here...
}
:バインドするASP.NET MVC
側にその魔法を行いますので、この例のように複雑なオブジェクトを、期待して、ちょうど通常、コントローラのアクションを宣言し、そのことについて心配しないでくださいこの:
function fixPlaceholder (keys, data, placeholder) {
for(var i = 0; i < keys.length; i++) {
placeholder = placeholder.replace(keys[i] + "=${PLACEHOLDER}", keys[i] + "=" + (data[keys[i]] || ""));
}
return placeholder;
}
$(function(){
$("button").on("click", function() {
var keys = ["Title", "Question", "AnswerNumber", "View", "Date", "Vote"];
var data = {Title:"Myitle", Question:"MyQuestion", Vote:"10"};
var placeholder = "?Title=${PLACEHOLDER}&Question=${PLACEHOLDER}&AnswerNumber=${PLACEHOLDER}&View=${PLACEHOLDER}&Date=${PLACEHOLDER}&Vote=${PLACEHOLDER}";
var url = '@Url.RouteUrl(new{ action="GetModelAsJson", controller="Home"})';
placeholder = fixPlaceholder(keys, data, placeholder);
url = url + placeholder;
$.ajax({
url: url,
type: "GET",
contentType: "application/json; charset=utf-8"
}).then(function(resp) {
console.log("Response");
console.log(resp);
});
});
ここではそれをチェックし、それに基づいてあなたのように動作するようにしようと、dotnetfiddleです。お役に立てれば。
注
あなたは、すべての要求にモデルに設定されていない可能性があります値を使用して、彼らがヌルであるかもしれない意味しているので、あなたはあなたのバックエンドモデルに注意を払う必要があります。つまり、int
、DateTime
などのタイプのプロパティがある場合は、毛むくじゃらの状況を避けるために、nullableとしてマークする必要があります。以下のモデルのように。
しかし、あなたの解決策としての正確な名前はわかりません。私はこのようなハードコードはできません。 new {name where title = title、age where title = title} 私はhtml.actionlink()で渡すときに匿名オブジェクトを渡す必要がありますか? –