我有以下的HtmlHelper扩展来创建一个提交按钮,将与JavaSceript工作关闭:多个“GET”在ASP.NET MVC的形式3
public static string ActionButton(this HtmlHelper helper, string value,
string action, string controller, object routeValues = null, object htmlAttributes = null)
{
var a = (new UrlHelper(helper.ViewContext.RequestContext))
.Action(action, controller, routeValues);
var form = new TagBuilder("form");
form.Attributes.Add("method", "get");
form.Attributes.Add("action", a);
form.Attributes.Add("style", "display:inline");
var input = new TagBuilder("input");
input.Attributes.Add("type", "submit");
input.Attributes.Add("value", value);
input.Attributes.Add("class", "button");
input.MergeAttributes(new RouteValueDictionary(htmlAttributes));
form.InnerHtml = input.ToString(TagRenderMode.SelfClosing);
return form.ToString(TagRenderMode.Normal);
}
的问题是,它工作正常,如果有只是页面上的这些按钮中的一个,但如果超过1个,奇怪的事情就开始发生。举例来说,如果我有一个循环以下声明:
<td class="tac"><%=Html.ActionButton("Choose", "CreateNewAuditFromExisting", "Audit", new { auditUid = audit.Uid })%></td>
下面的HTML被产生的,对我来说很好:
<tr>
<td class="tac">
<form action="/admin/Audit.mvc.aspx/CreateNewAuditFromExisting?auditUid=906e26e5-6505-4a70-b19a-9e8a00d74a88" method="get"style="display:inline">
<input class="button" type="submit" value="Choose">
</form>
</td>
</tr>
<tr>
<td class="tac">
<form action="/admin/Audit.mvc.aspx/CreateNewAuditFromExisting?auditUid=899eb11d-54a8-448f-9539-9e8a00d7c652" method="get" style="display:inline">
<input class="button" type="submit" value="Choose">
</form>
</td>
</tr>
当有超过1点的形式,查询字符串变提交表单时忽略。当这些按钮中的多个按钮位于窗体上时,我还有其他奇怪的行为。
我的问题是,这种行为是多个'get'形式的预期?
此外,有没有更好的方法来创建一个按钮,将JavaScript的功能禁用时,将导航像我想要实现的?
我的猜测是,你想要按钮,因为它的风格...在这种情况下,你可能想要使它成为一个普通的链接,并将其设计得像一个按钮。 – Gidon 2011-02-14 14:05:37
@ R0MANARMY:第一种形式也有一个按钮。出于某种原因,它与表单标签位于同一行。 – Guffa 2011-02-14 14:59:12