2011-06-29 14 views
1

ウェブブラウザが次のURLで自分の行動を呼び出しています。URLパラメータとその中のピリオドをMVCアクションパラメータにバインドするにはどうすればよいですか?

Request URL:http://localhost:4000/MyController/UrlCheck?Menu.Url=sometext 

私の行動は次のとおりです。

public JsonResult UrlCheck(string Url) 
{ 
    return Json("Url is " + Url , JsonRequestBehavior.AllowGet); 
} 

ただし、Urlパラメータは決してバインドされません。次のように使用しないでください。 URLは、Ajaxのポストの一部としてMVC自体によって生成され、複雑なオブジェクトのプロパティに関連付けられてい

public JsonResult UrlCheck([Bind(Prefix="Menu")] string Url) 

、したがって「Menu.Url」ビット。 URLパラメータの名前を変更するのは簡単ではありません。

また、パラメータ名としてMenu_Urlを試しました。アクションが実行され、ルーティングが正常に動作するはずです。

+0

あなたは、例えば、あなたの複雑なオブジェクトにバインドする代わりに、 '公共化するJsonResult UrlCheck(MyComplexObjectメニュー)'試したことがありますか? Menu.Urlを確認することができます。 – counsellorben

+0

これはうまくいくかもしれませんが、複雑なオブジェクトは複雑で、単純なハックは@Charlinoが以下に示唆したものです。両方の同様のアプローチ、ありがとう。 –

答えて

1

このようなパラメータを取得することはできませんが、Menuという簡単なビューモデルにバインドして、Urlというプロパティがあります。

など。

あなたのViewModel

public class SimpleViewModel 
{ 
    public string Url { get; set; } 
} 

あなたのアクション

public JsonResult UrlCheck(SimpleViewModel Menu) 
{ 
    return Json("Url is " + Menu.Url, JsonRequestBehavior.AllowGet); 
} 
関連する問題