2013-07-11 111 views
4

我在查看頁面中使用Html.Beginform並使用FormCollection獲取參數給控制器我想在同一ViewPage上返回成功消息,因此使用以下代碼,提交時在同一頁上顯示成功消息

public string InsertDetails(FormCollection collection) 
{  
    string result = "Record Inserted Successfully!"; 
    return result; 
} 

它顯示了新頁面上的成功消息。我該如何解決這個問題?我必須返回什麼才能在同一頁面上獲得成功消息?

回答

9

就我個人而言,我會彈出結果字符串到ViewBag中。

public ActionResult InsertDetails(FormCollection collection) 
       { 
       //DO LOGIC TO INSERT DETAILS 
       ViewBag.result = "Record Inserted Successfully!"; 
       return View(); 
       } 
然後在網頁上

<p>@ViewBag.result<p/> 
+0

請注意,確保您返回正確的視圖。注意到這個控制器動作並沒有以[HttpPost]開始[我猜這不是視圖最初被調用的方法 –

9

我有以下選項。

1.使用Ajax開始形成AjaxOptions像下面

@using (Ajax.BeginForm("ActionName", "ControllerName", new { area = "AreaName" }, new 
    AjaxOptions 
    { 
     HttpMethod = "POST", 
     OnSuccess = "alert('Success');" //This will execute once the Ajax call is finished. 

    }, null)) 
{ 
    <input type="submit" name="nameSubmit" value="Submit" /> 
} 

2.使用jQuery手動設置的XHR請求

$.ajax({ 
    url: "@Url.Action("ActionName", "ControllerName", new { area = "AreaName" });", 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({param : Value}) 
}) 
.done(function() { alert('Success');}) //This will execute when you request is completed. 
.fail(function() { }) 

我建議

有以下不足之處ES同時使用的FormCollection

點 - 1

如果FormCollection正在使用......這將是強制性的Type CastPrimitive Type值未必然,因爲在獲取System.Collections.Specialized.NameValueCollection的特定指數的進入,返回的值是String。在強類型View-Models的情況下不會出現這種情況。

問題 - 2

當您提交表單,並進入Post操作方法,並作爲View-Model參數在操作方法存在,你必須提供給發佈值發送給您View。否則,再編寫代碼通過TempData/ViewData/ViewBag

enter image description here



點送回去 - 3

我們有數據註釋,可以在View ModelCustom Validations實現。

enter image description here

ASP.Net MVC簡化了使用數據註釋模型validatons。數據註釋是屬性thyat應用於屬性的屬性。我們可以通過繼承內置的驗證屬性類來創建自定義驗證屬性。



點 - 4

例如,你有以下HTML

<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" /> 

問題:我們怎樣才能從訪問customAttr1的價值以上,例如來回m內部控制器

答案:當表單發佈時,只有元素的名稱和值被髮回服務器。 您還可以使用隱藏字段將屬性發布到發佈操作方法

替代:使用位的jQuery到與表單值的操作方法相處的自定義屬性值,和後

另一種選擇是,而把你所得到的在自定義的隱藏屬性控件




這就是原因,我總是喜歡使用View-Models

0

,我們可以做到這一點的Form裏面查看

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "POST", OnSuccess = "Showmessage" })) 

    [HttpPost] 
    public ActionResult Test(TestViewModel model) 
    { 
     return Json(new {isok=true, message="Your Message" });   
    } 

    function Showmessage(data) 
    { 
     $('#Element').html('Successfully Submitted'); 
    } 
相關問題