編輯:閱讀我的問題的底部,看看有什麼我實際上做了。我接受了不同的答案,但因爲我的解決方案需要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) { /* ... */ }
}
在我看來,我想有三個提交按鈕,每個按鈕鏈接到不同的控制器/動作,一個是編輯,刪除和顯示。不過,我希望用戶選擇傳遞的ID(通過GET)。我該怎麼做呢?
我知道我可以做的基礎上,input
submit
類型元素的value
一個新的控制器動作,其唯一目的是確定選擇哪三個的,但做法似乎醜陋的我;我想繞過這一步。理想的情況是我想要的東西,如:
@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>
這種做法並不讓我使用HTML選擇列表,不過,不是嗎? –
你想在下拉菜單中傳遞所選項目的ID嗎? – Shyju
是的。我不想使用JavaScript,因爲這看起來應該很簡單。 –