2012-12-09 75 views
1

我有下面的代碼視圖:如何實現表單按鈕不改變頁面

@using (Html.BeginForm("GenerateQrCode", "QrCodeGenerator", FormMethod.Post)) 
{ 
    <input type="submit" value="Generate" /> 
} 

這只是一個提交按鈕,它調用的代碼在我的控制器:

public void GenerateQrCode() 
    { 

    } 

是否有可能在我的控制器中的方法從窗體返回一個值,但沒有去不同的頁面?因爲我注意到目前在按下表單按鈕時,它會嘗試導航到不存在的'GenerateQrCode'頁面(與控制器方法名稱相同)。

UPDATE:

東西我已經試過正在控制器方法返回一個ActionResult,並返回一個「RedirectToAction」,並簡單地調用了同樣的觀點。但是,我也有這種方法的代碼'ViewBag.Message =「myMessage」;然後在我看來,我有'@ ViewBag.Message'的代碼,所以我希望視圖會更新與ViewBag消息屬性,但它並沒有出現。

+0

你最終解決了這個問題嗎? –

+0

是的,我提交了一個答案。 –

回答

0

這樣做的最簡單方法就是使用RedirectToAction方法,在參數中指定控制器的名稱。我還使用TempData變量將結果(本例中只是一個字符串值)傳遞迴視圖,並傳遞給ViewBag變量。

public ActionResult QrCodeGenerator() 
    { 
     ViewBag.Message = TempData["Message"]; 
     return View(); 
    } 

    public ActionResult GenerateQrCode() 
    { 
     TempData["Message"] = "myMessage"; 
     return RedirectToAction("QrCodeGenerator"); 
    } 
0

您使用的Html.BeginForm版本告訴提交按鈕發佈到GenerateQrCode操作。也許你可以試試Html.BeginFormanother overload更適合你的目的?

0

使用javascript: 處理單擊事件。 在處理程序中,防止默認操作並停止事件傳播。 使用表單數據調用服務器並進行AJAX調用。 獲取回覆並採取進一步的行動。

0

所以,如果我有這個權利,你想提交一個行動,而不實際考慮到服務器的響應。聽起來像你需要jQuery post

$.post(url, $("form selector").serialize(), function() { 
    // This is where you put a callback function. 
}); 

這就是你需要的一切。這將發佈數據。你可以做的是從事件按鈕click而不是表單提交按鈕。或者,您可以覆蓋窗體上的submit事件,並把這個作爲你的第一行代碼:

e.preventDefault(); 

其中e是你的事件參數。這將防止發生默認操作,在這種情況下是提交表單和加載響應。

+0

我應該在哪裏放置這個JavaScript?在.cshtml文件中?它適合我目前的表單代碼在哪裏? –

+0

將它放在.cshtml的'

相關問題