2016-12-15 71 views
-2

我寫的作品正在尋找更多的理解,當涉及從javascript和事件觸發到MVC Action的事件時。 javascript我已經根據按下的按鈕設置值true或false。表單是掛起還是不掛起是用戶操作。在相同的情況下(我相信)按鈕按下將表單提交給我的控制器。在MVC動作調用之前使用Javascript單擊事件

這是我所描述的。下面是我按鈕點擊提交的表單。

@using (Html.BeginForm("RejectInsertComment", Model.controller, FormMethod.Post, new { @class = "modal-form" })) 
{ 
    <!-- form elements --> 
      .... 
    @Html.HiddenFor(x => x.is_pended) 
    <input type="submit" class="PendLink btn btn-primary" name="Pend" value="Pend"/> 
    <input type="submit" class="CompleteLink btn btn-primary" name="Complete" value="Complete" /> 
} 

然後這裏是javascript,切換pend的值。

$('.PendLink').click(function() { 
      $('#is_pended').val(true); 
     }); 
$('.CompleteLink').click(function() { 
      $('#is_pended').val(false); 
     }); 

這個工程,我假設JavaScript在客戶端第一次觸發,但MVC知道如何等待?

回答

2

總之,ASP.NET MVC並沒有真正的事件,表單只是提交給提供的動作url;這與ASP.NET MVC無關。在表單提交之前,幾乎總是能夠成功執行javascript(取決於手頭的JavaScript可以運行多快)。如果你真的想確保運行的JavaScript提交表單之前,你需要使用的方法是這樣的:

<form onsubmit="return mySubmitFunction()"> 
    ... 
</form> 
<script> 
function mySubmitFunction(evt) { 
    evt.preventDefault(); 
    someBug(); 
    return false; 
} 
</script> 
+0

有趣。雖然這是有道理的。如果我有更復雜的JS進行,也許我應該使用preventDefault方法。你會建議我這樣做與點擊事件? – Jared

+0

更新:如果您不想提交表單並僅運行js函數,則可以這樣做。如果你想用JS運行第一次,你可以使用常規按鈕,而不是提交按鈕,並執行$(「#yourFormId」)。在你的js函數結束時。 – FailedUnitTest

1

你理解錯了,沒有MVC一旦你的瀏覽器會從服務器的響應。 MVC只是服務器端。您所有的.cshtml文件都將轉換爲純文本HTML並作爲回覆發回。

因此,您的@using (Html.BeginForm(..代碼將被更改爲HTML form標記。

所以實際上你只處理客戶端的HTML。

因此,現在來到表單提交之前執行的Jquery部分。是的,當你有事件綁定到你的DOM(在這種情況下是點擊事件)時,事件會一個接一個地執行。因此,在您的click處理程序中如果您不停止事件(例如:e.preventDefault()),那麼作爲下一個事件,表單將被提交。

相關問題