我有以下的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