【发布时间】:2012-09-17 08:01:14
【问题描述】:
编辑:阅读我的问题的底部,看看我实际做了什么。我接受了不同的答案,但因为我的解决方案需要 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)。我该怎么做?
我知道我可以创建一个新的控制器动作,其唯一目的是根据 submit 类型 input 元素的 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>
【问题讨论】:
标签: c# asp.net-mvc c#-4.0 razor angularjs