【发布时间】:2015-03-18 23:38:42
【问题描述】:
我有一个使用 MVC5 和 C# 的 Web 应用程序。在这个应用程序中,我有一个带有一个下拉列表和一个提交按钮的表单,如下所示:
<form class="form-horizontal" action="@Url.Action("AssignTemplate", "TemplateMapper")" method="post">
<div class="control-group">
<label class="control-label">Template:</label>
<div class="controls">
<select id="template">
@foreach (KeyValuePair<int, string> entry in Model.templates)
{
<option value="@entry.Key">@entry.Value</option>
}
</select>
</div>
</div>
<div class="control-group">
<div class="controls">
<input type="button" class="btn btn-primary" value="Assign" onclick="location.href='@Url.Action("AssignTemplate", "TemplateMapper")'" />
</div>
</div>
</form>
我的目标是在不使用 Razor Html Helper 语法的情况下向服务器发送一个包含在下拉列表中选择的信息的发布请求。
为此,我有以下控制器代码:
public class TemplateMapperController : Controller
{
[HttpPost]
public ActionResult AssignTemplate(int templateId)
{
return null;
}
}
但是,当我按下提交按钮时,我得到一个 404,未找到,即使该方法存在并且我在表单中声明它应该是一个 post 请求。
我错过了什么?我的控制器如何访问下拉列表中的信息?
【问题讨论】:
-
您的 AssignTemplate 方法应该接受包含 POST 中数据的模型,但我认为这不是问题,因为它不会导致 404。您能检查使用 Chrome 发布的内容吗督察?
-
如果您查看源代码,action 属性表示它也会提交什么? 404会和位置有关,很可能路径不正确。
-
你为什么不想使用剃刀语法?
-
您已经在使用带有
@Url.Action("AssignTemplate", "TemplateMapper")的剃刀语法。此外,您的输入应该是submit类型而不是button,并且没有对onclick事件的任何函数调用。你的 ActionResult 应该返回一个 View -
@chiapa:是的,除此之外。我的意思是我想避免 Html.BeginForm 和其他类似的助手。
标签: c# html asp.net-mvc forms post