Ich habe die folgende HTMLHelper-Erweiterung, um einen Submit-Button zu erstellen, der mit ausgeschaltetem JavaSceript funktionieren würde:
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);
}
Das Problem ist, dass es gut funktioniert, wenn es nur eine dieser Schaltflächen auf einer Seite gibt, aber wenn es mehr als 1 gibt, fangen seltsame Dinge an zu passieren. Zum Beispiel, wenn ich die folgende Erklärung in einer Schleife haben:
<td class="tac"><%=Html.ActionButton("Choose", "CreateNewAuditFromExisting", "Audit", new { auditUid = audit.Uid })%></td>
Es wird folgendes HTML generiert, das für mich gut aussieht:
<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>
Wenn es mehr als 1 Formular gibt, wird der Querystring beim Absenden des Formulars ignoriert. Ich habe andere seltsame Verhalten, wenn mehr als eine dieser Tasten auf einem Formular ist.
Meine Frage ist, ob dieses Verhalten für mehrere "get"-Formulare zu erwarten ist?
Gibt es eine bessere Möglichkeit, eine Schaltfläche zu erstellen, die funktioniert, wenn JavaScript deaktiviert ist, und die so navigiert, wie ich es erreichen möchte?