編集:私の質問の下部を読んで、私が実際に何をしたかを確認してください。私のソリューションにはAngularJSが必要なため、別の回答を受け入れました。
私はC#4.0とMVC 3/Razorを使用しています。独自のヘルパークラスを作成するよりも、フレームワークの既存の機能を活用したいと思います。これが私がやっていることです、簡略化されています:
これが私のモデルです:
MyModel.cs
public class MyModel
{
public string Name { get; set; }
public int ID { get; set; }
}
そして、これまでの私の見解:
Index.cshtml
@model IEnumerable<MyModel>
Please select a Model.
<select name="id">
@foreach (var m in Model)
{
<option value="@(m.ID)">@(m.ID) - @(m.Name)</option>
}
</select>
そして私のコントローラー:
MyController.cs
public class MyController : Controller
{
public ActionResult Index() { /* ... */ }
public ActionResult Display(int id) { /* ... */ }
public ActionResult Delete(int id) { /* ... */ }
public ActionResult Edit(int id) { /* ... */ }
}
私の見解では、3つの送信ボタンが必要です。それぞれが異なるコントローラー/アクションにリンクしており、1つは編集、削除、表示用です。ただし、ユーザーが選択したIDを(GET経由で)渡すようにしたいと思います。どうすればよいですか?
タイプ要素value
のに基づいて、3つのうちどれを選択するかを決定することを唯一の目的とする新しいコントローラーアクションを作成できることは知っていますが、そのアプローチは私には醜いようです。そのステップをバイパスしたいと思います。理想的には、次のようなものが必要です。submit
input
@using (Html.BeginForm("", "", FormMethod.Get))
{
<select name="id">
@foreach (var m in Model)
{
<option value="@(m.ID)">@(m.ID) - @(m.Name)</option>
}
</select>
@Html.SubmitButton("Edit", "My")
@Html.SubmitButton("Delete", "My")
@Html.SubmitButton("Display", "My")
}
しかし、そのようなことをしているように見えるメソッドシグネチャは見つかりませんHtml
。
編集:
これが私がやったことです。AngularJSと呼ばれるJavaScriptライブラリを使用しますが、追加のJavaScript配管は必要ありません。それはうまくいきます。
@model IEnumerable<MyModel>
<html>
<head>
<script type="text/javascript" src="../../Scripts/angular.js"></script>
</head>
<body ng-app>
<select ng-model="ID">
@foreach (var m in Model)
{
<option value="@(m.ID)">@(m.ID) - @(m.Name)</option>
}
</select>
@{
var forms = new[]
{
new { ActionName = "Display", ControllerName = "My" },
new { ActionName = "Edit", ControllerName = "My" },
new { ActionName = "Delete", ControllerName = "My" }
};
foreach (var form in forms)
{
using (Html.BeginForm(form.ActionName, form.ControllerName, FormMethod.Get))
{
<input type="submit" value="@(form.ActionName)" ng-disabled="ID == null"/>
<input type="hidden" name="id" value="{{ID}}"/>
}
}
}
</body>
</html>