私はC#.net MVCを初めてFullCalendar
使用し、MVCアプリケーションに追加しようとしています。
スクリプトはFullCalendar
自動的にURLに追加します...これは問題ありませんが、コントローラーで変数?start={}&end={}
を使用する方法がわかりません。querystring
Webformsアプリケーションで使用した方法は機能しません。querystring
変数にアクセスするには、コントローラーに何を追加する必要がありますか?
私はC#.net MVCを初めてFullCalendar
使用し、MVCアプリケーションに追加しようとしています。
スクリプトはFullCalendar
自動的にURLに追加します...これは問題ありませんが、コントローラーで変数?start={}&end={}
を使用する方法がわかりません。querystring
Webformsアプリケーションで使用した方法は機能しません。querystring
変数にアクセスするには、コントローラーに何を追加する必要がありますか?
public ActionResult SomeAction(string start, string end)
フレームワークは、クエリ文字列パラメーターをメソッドパラメーターにマップします。
私はそれを理解しました...ついにそれに関する別の記事を見つけました。
string start = Request.QueryString["start"];
string end = Request.QueryString["end"];
デビッド、私はあなたとまったく同じ問題を抱えていました。MVCは直感的ではなく、設計したとき、子供たちはMVCの直感的なクエリ文字列システムの目的や重要性を理解していなかったようです。
クエリ文字列はルートにまったく設定されていません(RouteConfig)。これらは、コントローラーのアクションへのアドオンの「追加」パラメーターです。アクションパラメータはパスとクエリ文字列の両方を処理するように設計されているため、これは非常に混乱します。パラメータを追加しても機能しなかった場合は、クエリ文字列に2番目のパラメータを次のように追加します。
これは、ID(実際には、MVCの一般的なデフォルトパスとしてRouteConfigファイルに設定されたパス)をキャッチするControllerクラスでのアクションになります。
public ActionResult Hello(int id)
ただし、クエリ文字列をキャッチするには、コントローラーに追加のパラメーターを追加する必要があります(ちなみに、これはRouteConfigファイルに設定されていません)。
public ActionResult Hello(int id, string start, string end)
これで、RouteConfig.csで「id」がオプションに設定されていると仮定して、「/ Hello?start =&end=」または「/Hello /?start =&end=」または「/Hello / 45?start =&end=」をリッスンします。ファイル。
「id」パスを持たないRouteConfigファイルに「カスタムルート」を作成する場合は、そのファイルのアクションの後に「id」またはその他のパラメーターを省略できます。その場合、コントローラーのActionメソッドのパラメーターはクエリ文字列のみを処理します。
私はこれが非常に混乱していることに気づいたので、あなたは一人ではありません!彼らは、RouteConfigファイル構成設計で、特定の名前付き文字列、任意のクエリ文字列名、および任意の数のクエリ文字列の両方にクエリ文字列ルートを追加する簡単な方法を設計する必要がありました。そうしないと、MVC Webアプリケーションでのクエリ文字列の使用全体が疑わしいままになります。これは、クエリ文字列が1990年代半ばからワールドワイドウェブの安定した部分であったため、かなり奇妙なことです。:(
これが私が思いついたものです。私はこれに関して大きな問題を抱えていて、現在MVC 6にいると信じていますが、これは将来、私自身でさえも役立つかもしれません。
//問題は、Reqest.Form Request.QuerystringとRequestがMVCで機能しないことでした。解決策は、Context.Request.Formを使用し、フォームが送信されていることを確認することです。そうしないと、null参照またはコンテキスト問題のバグが表示されます。
if(Context.Request.ContentLength != null)
{
String StartDate = Context.Request.Form["StartMonth"].ToString();
String EndMonth = Context.Request.Form["EndMonth"].ToString();
// Vendor
}
私の問題は、クエリ文字列パラメータをデフォルト値で上書きすることでした。
routes.MapRoute(
"apiRoute",
"api/{action}/{key}",
new { controller = "Api", action = "Prices", key = ""}
);
クエリ文字列に何を接続したか、またはkey=""
結果のみがどのようになったかは関係ありません。
次に、UrlParameter.Optionalを使用してデフォルトの上書きを取り除きました。
routes.MapRoute(
"apiRoute",
"api/{action}/{key}",
new { controller = "Api", action = "Prices", key = UrlParameter.Optional }
);
今
prices/{key}
また
prices?key={key}
どちらも正常に動作します。
通常のControllerクラスの代わりにApiControllerから継承しているときに、この問題が発生しました。使って解決しました var container = Request.GetQueryNameValuePairs().ToLookup(x => x.Key, x => x.Value);
このスレッドをフォローしましたリクエストクエリ文字列の値を取得するにはどうすればよいですか?
編集:コンテナをフィルタリングしようとした後、奇妙なエラーメッセージが表示されていました。プロジェクトのプロパティに移動し、[コードの最適化]チェックボックスをオフにした後、コントローラーのパラメーターが突然URLから必要に応じていっぱいになるように変更しました。
うまくいけば、これは同じ問題を持つ人を助けるでしょう。