MVC-machen-Aktion link einen submit ausführen
Ich bin versucht derzeit, machen Sie eine html-submit auftreten, aber das MVC-helper-Methode ActionLink wie ich nicht wollen, dass es einen button, ich möchte, dass es einen unterstrichenen link, wie der rest auf meiner Seite. Dies ist, was ich derzeit habe
<%= Html.ActionLink("Delete Selected", "DeleteCheckBox", "Domains", "Default.aspx", new { type="submit" }) %>
Dieser springt wieder zurück auf mein handeln in Ordnung, aber alle domains, die ausgewählt sind aus-gelöscht werden, werden nicht zurück geschickt. (wenn ich diese <input type="submit" name="DeleteAction" value="Delete" />
es funktioniert gut, also ich weiß, dass es nicht etwas falsch mit dem senden oder empfangen der check-Boxen)
Hier ist, was ich habe, so weit ...
>" %>
Index
<h2>Domain List</h2>
<h2 style="color: #FF0000"><%= Html.Encode(ViewData[IProwlAdminUI.Utils.Global.ExceptionMessageKey]) %></h2>
<h2 style="color: #FF0000"><%= Html.Encode(ViewData["Message"]) %></h2>
<% using (Html.BeginForm("DeleteCheckBox", "Domains"))
{ %>
<% if (ViewData.ContainsKey("DeleteMessage"))
{ %>
<h2 style="color: #FF0000"><%= Html.Encode(ViewData["DeleteMessage"]) %></h2>
<input type="submit" name="DeleteAction" value="Commit" /> <input type="reset" name="DeleteAction" value="Cancel" />
<% } %>
<p>
<%= Html.ActionLink("Create New", "Create") %>
| <%= Html.ActionLink("Export List", "Export") %>
| **<a href="javascript:void(0)" class="DeleteLink">Delete Selected</a>**
<% if (ViewData.ContainsKey("Path"))
{ %>
| <%= Html.ReferenceToFile("/download/Domains.xls", "Exported File") %>
<% } %>
</p>
<div style="overflow:scroll; width:100%">
<% Html.Telerik().Grid(Model).Name("Domains")
.DataKeys(dataKeys => dataKeys.Add(c => c.DomainId)).DataKeys(dataKeys => dataKeys.Add(c => c.Name))
.Columns(columns =>
{
columns.Template(o =>
{ %>
<%= Html.ActionLink("Edit", "Edit", new { id = o.DomainId })%>
<%
}).Title("Edit");
columns.Template(o =>
{ %>
<% if (ViewData.ContainsKey("DeleteMessage"))
{ %>
<input type='checkbox' checked="checked" id='<%= o.Name %>' name='DeleteIds' value='<%= o.DomainId %>' />
<% } %>
<% else
{ %>
<input type='checkbox' id='<%= o.Name %>' name='DeleteIds' value='<%= o.DomainId %>' />
<% } %>
<%
}).Title("Delete");
columns.Bound(o => o.DomainId);
columns.Bound(o => o.Name);
columns.Bound(o => o.SiteId);
columns.Bound(o => o.ScrubAndRedirect);
columns.Bound(o => o.ReportingSiteId);
columns.Bound(o => o.TrafficCopClass);
columns.Bound(o => o.SiteName);
columns.Bound(o => o.FeedType);
columns.Bound(o => o.Active);
}).Sortable().Filterable().DataBinding(db => db.Server().Select("Index", "Domains")).Render();%>
</div>
<% if (!ViewData.ContainsKey("DeleteMessage"))
{ %>
<input type="submit" name="DeleteAction" value="Delete" />
<% } %>
<% } %>
<p>
<%= Html.ActionLink("Create New", "Create") %> | <%= Html.ActionLink("Export List", "Export") %>
<% if (ViewData.ContainsKey("Path"))
{ %>
| <%= Html.ReferenceToFile("/download/Domains.xls", "Exported File") %>
<% } %>
</p>
**<script type="text/javascript">
$(function() {
$('.DeleteLink').click(function() {
$(this).closest('form')[0].submit();
});
});
</script>**
- Ich habe darüber geschrieben in meinem blog-Beitrag ASP.NET MVC LinkButton mit HtmlHelper-Erweiterungen. Pete
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen hyperlink Einreichen ein Formular ohne Javascript.
Mithilfe von jQuery können Sie schreiben,
<script>
tag in der Ansicht.$(this).closest('form')
finden die innerste<form>
tag mit dem angeklickten element. Deshalb senden das Formular mit dem link.<head>
- tag, die bewirkt, dass es ausführt, bevor die Seite geladen wird. Daher wird, wenn das Skript läuft, es gibt keine.DeleteLink
Elemente zum hinzufügen von Ereignis-Handlern zu. Wickeln Sie den code in$(function() { ... })
oder verschieben Sie es unterhalb der Formen.Html.BeginForm
- Methode rendert eine normale<form>
tag, also ist es egal.<script>
tag ist bereits nach den Formen, sollte es bereits funktionieren. Können Sie mir zeigen, der gerenderte Quelltext Ihrer Seite auf JSBin.com?Hinzufügen SLaks, können Sie sicherstellen, dass Ihre jQuery-code wird ausgelöst, die zu der entsprechenden Zeit (unabhängig von der Position auf der Seite) mit dem folgenden:
Durch umwickeln Sie den code in
$(document).ready(...)
stellen Sie sicher, dass der code nicht ausgeführt, bevor die Seite fertig geladen ist.Erstellen, anstatt einen action-link, Sie werden besser schreiben clientseitiger javascript-code, die senden das Formular für Sie, wenn der link angeklickt wird.
Können Sie ganz einfach mit jQuery um dies zu tun, verwenden Sie die submit-Methode auf ein Selektor wählt die form:
formSelector
ist ein jQuery-Objekt, nicht eine Auswahl. Selektoren sind Zeichenfolgen wie#myForm
oderform:has(a.DeleteLink)
. Auch, da die form submit wird die Seite neu geladen, es hat keinen Sinn, die Variablen in den ersten Platz.Meisten Antworten, die ich sah, verlassen Sie sich auf jQuery oder tun einige nette ajax-submit, das ist nicht das, was ich wollte. Also schrieb ich HtmlHelper-Erweiterung Methode, die schafft Ebene Formular mit hidden-inputs und buttons. Es ist work in progress... kann immer noch den job zu erledigen. Hier ist Klasse:
Benutzen, Rasierer Sie schreiben:
Und als Ergebnis in HTML erhalten Sie:
wenn Sie mit bootstrap, um eine Schaltfläche Aussehen wie ein link, fügen Sie einfach die btn-Klasse link, zum Beispiel
Dies kann durch die aufrufende Klasse von javascript in C#
Für Die Razor-Syntax
Dann rufen Jquery zu senden.
Update 1#
Wenig Erklärung, wo wir können, verwenden Sie diese.
Geht um die Ursprüngliche Frage MVC-machen-Aktion link führen Sie einen submit -
Index.cshtml Beispiel chtml Datei Anzeigen
Ich versuchte Gipfel der Ansatz von oben Gestochen, aber notwendig, einige änderungen vorzunehmen. Einschließlich der Controller den Namen im link verursacht die-Seite zu umgehen, die JQuery und direkt das Formular abschicken. So, ich habe versucht, die folgenden:
Ab da war ich in der Lage, Zugriff auf die Schaltfläche id und verwenden Sie die onclick-Methode.
Sollte ich hinzufügen, dass ich wollte, dass die form eingereicht werden, aber nicht unbedingt wollen, zu übertragen, zu einer anderen Seite und/oder der Aktion.
ich habe es in anderer Weise
habe ich den link inside form tag
und schicken Sie das Formular durch, das der link