我需要ASP MVC的帮助。 我有:
<% using (Html.BeginForm(null,null,FormMethod.Post)) {%>
<p>
<input type="submit" value="Choose" />
.
.
.
<%=Html.ActionLink("Save", "Index")%>
</p>
<% } %>
我需要通过ActionLink提交表单,因为我需要从dropdownlist中获取selectedValue,我不知道如何从FormCollection或带有属性POST的方法中的参数那样做。否则
所以我需要在点击动作链接后调用此函数。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection formValues)
{
}
我尝试使用jquery和Ajax.ActionLink
,但所有内容都称为Index的GET方法。 (new { onclick = "$(this).parents('form').first().submit();"
- 对我来说不起作用 - 也称为GET方法)
答案 0 :(得分:1)
您需要调用表单的提交,然后返回false。使用Javascript:
$(function() {
$('find-your-link').click(function(e) {
e.preventDefault();
$(this).parents('form').first().submit();
});
});
这应该提交表单而不会将您发送到GET URL。
答案 1 :(得分:1)
试试这个:
HTML / C#:
<%
using (Html.BeginForm(null,null,FormMethod.Post, new { id = "myform" }))
{%>
<p>
<input type="submit" value="Choose" />
.
.
.
<%=Html.ActionLink("Save", "Index", null, new { id="action-save" })%>
</p>
<% } %>
JS:
$(function() {
$('#action-save').bind('click', function(event) {
$('#myform').submit();
return false;
});
});
答案 2 :(得分:0)
默认情况下,actionlink将始终为GET。你不能把它变成一个开箱即用的POST。
关于您的设置,当您使用常规提交按钮时,下拉列表中的值应位于FormCollection
。
另一种方法是使方法参数与formvalues匹配。例如,如果你有一个名为“foo”的下拉列表,你可以有一个方法Index(string foo)
,如果它具有相同的名称,MVC会将dropdownlist-value映射到该参数。请记住,formvalues的类型应该能够被解析为参数的类型。在您的情况下,如果您的下拉列表的值类型是int, your method-parameter should be of type
int`类型。 (您不能指望将表单数组值解析为字符串类型参数。)
此外,我建议您将方法归为[HttpPost]
,更可读,然后[AcceptVerbs(HttpVerbs.Post)]
如果你想使用ActionLink,你必须开始使用你的javascript技能,最终提交formvalues。
提示:如果在POST方法的第一行设置断点,并且在this
上执行监视,则可以通过浏览几个基类来查看提交的值,然后查找{ {1}}。