2016-04-19 19 views
1

私はこの日のほとんどをこの部分に追いかけて過ごしました。ASP.NET MVCの@ Url.Actionアクションアクションに?

リンクボタンhrefが絶対アドレスにある既存のウェブサイトがあります。私はこれを行う方法を見つけようとしています。私はそれをほとんど持っていますが、スタイル付きのボタンとフォームアクションを持つ1行だけでは機能しません。元のコードは次のようである:私はボタンがクリックされたときにボタン画像としてglyphicon、及びformactionを保持する必要

@using(Html.BeginForm(null,null,FormMethod.Post)) 
{ 
    // ... a <div>, then a stack of buttons, that I've converted to 
    // <a href="@Url.Action(.... and those buttons work 

    <button class="submit" id="Save" value="Save" formaction="Model/Action" class="btn btn-primary"><span class="glyphicon glyphicon-floppy-save"></span></button> 

    // ... a stack of more buttons and checkboxes, that are all working... 
}... 

ボタンを<input>に変更すると、<span>、したがってグリフコンが失われます。私はこのようなボタンで@Url.Action()を、呼び出した場合

<button type="submit" onclick="location.href='@Url.Action("Action","Model")'" class="btn.... etc. 

ポストに何かを提出していないようです。 BeginForm()でアクションとモデルを指定すると、アクションを見る代わりにビューを探しているため、リソースが見つかりません。

したがって、です。このボタンをASP.NET MVCへの絶対リンクで変更すると、コントローラーでアクションが発生しますはグリフィンをイメージとしてボタンとしてスタイリングできますか?

+0

AFAIK、 'BeginForm()'はビューを必要としません。そのコントローラーとそのコントローラー内のアクションを指すだけです。 –

+0

ありがとう@LarsKristensen ...私もそうだと思っていましたが、BeginForm()でアクションとコントローラーを設定すると、formaction経由で呼び出したときに「リソースが見つかりません」というエラーが表示されます – ToshiBoy

+1

問題'formaction =" Model/Action "属性のようです。複数の送信ボタン(他のボタンだけでなく、フォームを送信するボタン)もありますか?そうでない場合は、この属性を削除できます。 –

答えて

1

問題は、送信ボタンのformaction="Model/Action"属性のためです。この属性は、Html.BeginForm()メソッドで定義されているものとは異なるコントローラとアクションを指すために使用されます。複数のサブミットボタンが同じフォームにあり、異なるアクションにサブミットする必要がある場合に便利です。

Html.BeginForm()メソッドにコントローラとアクションが定義されていないため、formaction属性は、モデルのタイプに一致する引数を受け入れるコントローラアクションを指している必要があります。現在、"Model/Action"を指しています。 ModelControllerというコントローラーがないか、コントローラーにActionというアクションがないため、HTTP 404エラーが発生します。 formaction属性のコントローラーまたはアクション部分を、正しいコントローラーまたはアクションを指すように変更します。絶対に持っていた

<button type="submit" 
     id="Save" 
     value="Save" 
     formaction="/somecontroller/someaction" 
     class="btn btn-primary"> 
    <span class="glyphicon glyphicon-floppy-save"> 
    </span> 
</button> 

:から

:ちょうど立ち往生私自身の参照や他の誰、ここに私の変換のために:

+0

ありがとう@LarsKristensen。あなたのおかげで、私は大きな一歩を踏み出しました。アクションはそこにありましたが、何らかの理由で起動しませんでしたので、コントローラーに書き直して、今度は起動します - おそらくタイプミスですか? Anyhoo ...私は今、別の問題があり、それはデータが渡されていないということです。これはボタンタグの "formaction"を介して動作しますが、@ Url.Action( "Action"、 "Model")を呼び出すと、データを渡すことができません。ご協力ありがとうございました。 – ToshiBoy

+0

うれしいことです:-) モデルを別のアクションに投稿する必要がある場合は、リンクがクリックされたときにHTTP GETリクエストを生成するので、 '@ Url.Action'を使用することはできません。 GET要求本体にデータを含める(またはそうではない)必要があります。したがって、異なるアクションを指す複数のサブミットボタンが必要です。私はこれの例をしようとすることができますが、私は今日それを行うことができなくなります。 –

+1

ありがとう、@ LarsKristensen、私は複数の提出シナリオに関する情報と他のリンクを見た。私は大丈夫です! :-) – ToshiBoy

1

だから、私はこの問題を解決する手助けするために@LarsKristensenをお願い致しますリンク、私は今持っている:

@using{Html.BeginForm("someaction","somecontroller", FormMethod.Post)) 
{ 
    // ... lots of other HTML and form elements 

    <button type="submit" 
      id= "Save" 
      value = "Save" 
      onclick="location.href='@Url.Action("someaction","somecontroller","Save")'" 
      class="btn btn-primary"> 
     <span class="glyphicon glyphicon-floppy-save"> 
     </span> 
    </button> 
    // .. lots of other HTML and form elements 
} 

1つの注意書きで。これは、単一の送信ボタンでのみ機能します。

関連する問題