それについて行く適切な方法は何ですか。以下の例のように動作する必要があります。
<input type="button" value="Resume" onclick="window.location = '/Test?testid=@(ViewBag.TestID)'" />
それについて行く適切な方法は何ですか。以下の例のように動作する必要があります。
<input type="button" value="Resume" onclick="window.location = '/Test?testid=@(ViewBag.TestID)'" />
意味的に正しいマークアップを作成するには、この特定の例に ActionLink を使用する必要があるという Zabavsky のコメントを絶対に支持します。
しかし、あなたが尋ねたので:
ビューでカミソリ構文と Javascript を混在させる
絶対にしないでください。
ビューには、マークアップのみが必要です。
<input type="button" value="Resume" id="myButton" data-url="@Url.Action("Test", new { testid = ViewBag.TestID })" />
および javascript ( IN A SEPARATE FILE ) を使用すると、このマークアップを操作して目立たないように拡張できます。
$(function() {
$('#myButton').click(function() {
window.location.href = $(this).data('url');
});
});
もちろん、ユーザーが JavaScript を無効にしている場合、Web アプリケーションは完全に無効になります。そのため、常に意味的に正しいマークアップを記述する必要があります。この場合、HTML ボタンはフォームの送信に使用され、アンカーは他の場所にリダイレクトするために使用されるため、アンカーを使用することになります (これはまさに、この特定のケースで達成しようとしているものです)。
Zabavsky が言ったように、これには ActionLink を使用します。
このようなもの:
@Html.ActionLink("Resume", "Test", new { testid = ViewBag.TestID })
actionlink にはかなりの数のオーバーライドがあるため、ニーズに合ったものを選択する必要があります。
上記のものは、現在のコントローラーのアクション「Test」に「Resume」というテキストを含む a href を出力し、testid = ViewBag.TestID のルート値を渡します。
次のようにできます。
<html><head><script>function newDoc() { window.location.assign("http://www.abc.com") }</script></head><body><input type="button" value="Load new document" onclick="newDoc()"></body></html>
それが役立つことを願っています。ありがとう。
まあ、あなたが書いたことは有効です。'' 文字列が終了していないために js エラーが発生したと思われるため、VS がコードに赤で下線を引くことがありますが、実行すると動作します。
赤い下線を避けるには、次のようにします。
@{string js = "window.location = '/Test?testid="+ViewBag.TestID+" '";}
<input type="button" value="Resume" onclick="@js" />