2016-05-10 12 views
1

中にURLパラメータを維持:MVC私は現在、次のURLの形式を設定しているポスト

http://localhost/mySite/inventory/create/26/1 

これは、フォーム送信ボタンがどのように見えるactionMethod

[HttpGet] 
    public ActionResult create(int exId, int secId) 


    [HttpPost] 
    public ActionResult create(MyModel model, int exId, int secId, FormCollection form) 

に行きます

@using (Html.BeginForm("create", "inventory", new { @exId= Model.ExId, @secId= Model.SecId}, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 

および

ポストが発生したときに、今のURLがに変更され、/作成/ 1分の26:

私の質問をされたのと、URLを保つために、ポストの間にとにかくあり

http://localhost/mySite/inventory/create?exId=26&secId=1 

保つためにとにかくがありますそれはどのようにそれを持っているかのように、/ create/26/1?

+0

GenreatedマークアップのフォームメソッドがPOSTに設定されていますか? – Shyju

+0

@Shyjuはい、

Paritosh

答えて

2

これはルーティングの問題が原因と考えられます。 MVC短絡配線。言い換えると、うまくいくものが見つかるとすぐに、より良いルートが利用可能であっても、そのルートが使用されます。あなたのシナリオでは、/inventory/createが有効なルートであり、クエリ文字列paramsは任意であるため、そこに残りのルート値を貼り付けるだけです。あなたのルート設定を見ることなく言うのは難しいですが、/inventory/create/{exId}/{secId}のルートが来たときは、ちょうど/inventory/createのルートをキャッチしてください。属性ルーティングを使用している場合は、固有の順序やルートがないため、実際に使用するルート名を区別するためにルート名を使用する必要があります。

すべてのことは、ここで最も簡単なことは単にURLを生成しないことだけです。あなたはポストバックをやっているので、ただ空のアクションを使うことができます。 htmlAttributesHtml.BeginFormに渡そうとしているため、ほとんどの場合この問題が発生していると思います。この場合、必要でない余分なものを指定する必要があります。このような状況では、静的な<form>タグを使用することをお勧めします。 を使用してHtml.BeginFormを使用していない場合や、このような歪曲をしているときは、そうでない方が良いです。

<form class="form-horizontal" role="form" action="" method="post"> 
    ... 
</form> 
関連する問題