2013-02-13 9 views
8

Ich habe ein Problem mit dem Aufruf von JS-Methode aus Formular in MVC3-Projekt: Ich habe eine "Such" -Seite ohne Formulare mit zwei Schaltflächen - Suchen und Abbrechen. Klicken Sie auf Suche läuft JS Funktion runSearch in ProductDefinition.Add onsubmit-Ereignis zum Aufruf der JS-Funktion in MVC3

<div id="productSearch-dialog" class="modal fade" style="width: 1000px; display: none"> 
<div class="modal-header"> 
    <button class="close" aria-hidden="true" data-dismiss="modal" type="button">×</button> 
    <h3>Search Results</h3> 
</div> 
<div class="modal-body" style="height: 650px;"> 
    <div> 
     <input id="inputname" type="text" /><font class="red-font" id="lblrequired" style="display: none">*</font> 
    </div> 
    <div id="searchresultcontain" class="grid"> 
    </div> 
    <div id="Pagination" class="pagination"> 
    </div> 
</div> 
<div class="modal-footer"> 
    <button class="btn btn-primary" onclick="productDefinition.runSearch();">Search</button> 
    <button class="btn btn-primary" data-dismiss="modal">Cancel</button> 
</div> 

Wie kann ich laufen diese JS-Methode (runSearch), wenn ich drücken? So weit ich verstehe, wird dies ein onsubmit-Ereignis sein, das ein Formularereignis ist, also muss ich ein Formularelement mit der Eigenschaft onsubmit hinzufügen. Ich habe versucht, Eingabefeld umgibt mit Beginhilfsmethode:

@using (Html.BeginForm(new { onsubmit = "productDefinition.runSearch();" })) 
{ 
    <input id="inputname" type="text" /><font class="red-font" id="lblrequired" style="display: none">*</font> 
    <input type="submit" value="Submit" style="visibility: hidden" /> 
} 

aber es nicht zu funktionieren scheint - wenn ich drücken trete ich aus irgendeinem Grund Quelle der Seite erhalten und kommen zu localhost/onsubmit = productDefinition.runSearch() URL.
Was kann die Ursache des Problems sein und wie bekomme ich das gleiche Verhalten für onsubmit wie für onclick?

+0

die Funktion js Sie verwenden werde nicht, wenn Sie auf Suchtaste klicken? – Rajpurohit

+0

Können Sie das JavaScript beim Übergeben von Formular ausführen? –

+0

wenn onlick - ja, onsumbit nein –

Antwort

10
@using (Html.BeginForm(new { onsubmit = "return runSearch();" })) 



<script type="text/javascript"> 
    function runSearch() { 
      // your logic to perform the search. 
      return true; 
    } 
</script> 
+4

Ich denke nicht, dass dies funktioniert, da MVC Ihren Parameter als eine Sammlung von Routenwerten betrachten wird - http://msdn.microsoft.com/en-us/library/dd470793(v) = vs.108) .aspx –

+0

@Sergey sollte die HTML-Hilfe nicht die RouteValues ​​Overload verwenden. das OP kann verwenden, welche Überlastung am besten zu ihm passt, als zusätzliche Referenz: http://chenz101tutorials.blogspot.co.uk/2010/10/submit-form-using-aspnet-mvc.html –

+2

aber es gibt nur zwei Überladungen von HtmlHelper.BeginForm, das einzelne Parameter und beide als routeValues ​​anwendet. Ihr Link beweist das auch, sie geben ein ID-Attribut wie folgt an: 'Html.BeginForm (null, null, FormMethod.Post, neu {id =" myForm "})' –

2

Sie müssen die following version of BeginForm method verwenden, um HTML-Attribute angeben.

Allerdings ist es eine schlechte Praxis, Inline-Javascript zu verwenden, so würde ich vorschlagen, zuweisen und ID-Attribut zu Ihrem Formular und Handle sein Senden Ereignis in der externen Javascript-Datei statt. Wenn Sie jQuery für Ihr Projekt verwenden, finden Sie hier ein gutes Beispiel aus ihren Dokumenten - http://api.jquery.com/submit/. Im Plan JavaScript ist es ein bisschen schwieriger, aber immer noch einfach zu tun.

+0

runSearch Die JS-Funktion befindet sich in ProductDefinition.js. Also muss ich smth so machen: mit (@ Html.BeginForm (new {id = "searchForm"} ")) {...} und in ProductDefinition.js: $ (" searchForm "). Submit (function() {runSearch(); return false}); auch alle Einträge in dieser Datei sind wie func_name: function() wie wickle ich den sumbit handler? –

+0

Fast sollte Ihr Code so aussehen - 'Html.BeginForm (null, null, FormMethod.Post, new {id = "searchForm"}) '. Sie können den Submit-Handler am Ende der Datei ProductDefinition.js wie folgt hinzufügen -' $ (function() {$ ("searchForm"). submit (function() {runSearch(); return false});}) ' –

0
@model Models.Person 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#registerInputId').click(function() { 
      alert('what do you do before send? For example encrypt the password'); 

      $('#Password').val(CryptoJS.MD5($('#Password').val())); 
     }) 
    }); 
</script> 

@using (Html.BeginForm()) 
    { 
    @Html.AntiForgeryToken() 
    <div class="form-horizontal" style="display: inline-block; margin: 5% auto;"> 
     <div style="font-size: 18px; margin-right:2px; margin-bottom:20px; text-align:right;">Add form</div> 
     @Html.ValidationSummary(true) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-5" }) 
      <div class="col-md-7"> 
       @Html.EditorFor(model => model.Name) 
       @Html.ValidationMessageFor(model => model.Name) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-5" }) 
      <div class="col-md-7"> 
       @Html.EditorFor(model => model.Password) 
       @Html.ValidationMessageFor(model => model.Password) 
      </div> 
     </div> 

     <div class="form-group" style="margin-top: 30px;"> 
      <div class="col-md-offset-3 col-md-6"> 
       <input id="registerInputId" type="submit" value="Register" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 
0

Form.Id ist erforderlich, wenn onsubmit Handler implementiert generische Funktionen, anwendbar für mehrere Formulare. (Beispiel: Sperrung werden alle Eingabefelder)

Formular

@using (Html.BeginForm(new { 
    id = "form24", 
    onsubmit = "return onSubmitHandler(id);" 
})) 

Handler

<script type="text/javascript"> 
    function onSubmitHandler(formId) { /*formId is form24 */ } 
</script> 
Verwandte Themen