2013-02-21 64 views
1

我想傳遞一個消息給另一個視圖(實際上同一個控制器),我可以做得很好,但有我的一個問題..通過值從視野中控制器在Asp.net MVC

我是新網絡上,它似乎好犯規..

problem

,在這裏我的C#代碼

if (createStatus == MembershipCreateStatus.Success) 
{   
    string registrationMessage = "You have registered successfully"; 

    return RedirectToAction("KurumsalGiris", new { message = registrationMessage }); 
} 


[AllowAnonymous] //sonradan eklendi 
public ActionResult KurumsalGiris(string message="") 
{ 

    if (User.Identity.IsAuthenticated) 
     return Content("Zaten giriş yapmışsınız"); 

    ViewBag.RegistrationMessage = message; 

    return View(); 
} 

這裏HTML側

@model E_Cv.Models.LogOnModel 

@{ 
    ViewBag.Title = "Kurumsal Giriş"; 
} 

<h2>Kurumsal Giriş</h2> 

<h2>@ViewBag.RegistrationMessage</h2> 

<p> 
    Please enter your user name and password. 
    @Html.ActionLink("Yeni Kurum Kaydı", "KurumsalKayit") 
    if you don't have an account. 
</p> 

所以我不知道如何通過不同的方式將值傳遞給另一個視圖..我不想在地址欄上顯示這種消息和用戶musnt改變它。

其次我可以用「獲取」方法嗎?

回答

2

你會做什麼,而不是返回一個RedirectToAction 你可以直接返回查看:(第二個參數是一個模型,在那裏你可以使用相同的模型類E_Cv.Models.LogOnModel添加RegistrationMessage屬性吧)

return View("<name of the view>", 
    new E_Cv.Models.LogOnModel { 
    RegistrationMessage = "You have registered successfully" 
    }); 

或保持在ViewBag數據像你這樣做:

ViewBag.RegistrationMessage = "You have registered successfully"; 
return View("<name of the view>"); 

關於你的最後一個問題,給該消息被顯示在你的網址,你正在使用GET方法,如果你返回改爲查看重定向的,它會避免顯示的URL任何

+0

mmmm是的你是對的..我可以使用視圖,而不是RedirectAction。我認爲它比其他人更好?謝謝 – ertan2002 2013-02-21 16:09:20

+0

喬納森的回答的第一部分是與此相同,但後來他建議加密的URL字符串,並那種毀了他的答案這就是爲什麼我給這一個+1。 – Icarus 2013-02-21 16:13:42

+0

@Ricardo,謝謝你,但ViewBag.RegistrationMessage看起來是空的..在另一個視圖或行動..? – ertan2002 2013-02-21 16:15:35

3

爲什麼你不只是返回一個不同的視圖,而不是重定向?事實上,發佈在第一位的代碼應該發佈到控制器,該控制器返回成功登錄的視圖。

事實上,爲什麼你要重定向到一個頁面,要求用戶登錄,如果他們剛剛登錄?

其他可能的選項包括加密URL中的字符串,或者只是將控制器轉換爲相應字符串的URL中的標誌。

+0

謝謝你的答案@Jonothan,是用戶註冊,但我需要通過電話進行確認。因爲這部分網站將用於公司。然後他們開始記錄,直到我確認他們。這就是我做到這一點的原因。而且信息會比那個更長。然後,即使打開郵件也不會看起來像好..謝謝。 – ertan2002 2013-02-21 16:02:58

1

如果問題是如何在不使用查詢字符串的情況下在控制器之間傳遞數據,那麼一個選項是Session對象。

if (createStatus == MembershipCreateStatus.Success) 
{   
    Session["Message"] = "You have registered successfully"; 

    return RedirectToAction("KurumsalGiris"); 
} 


[AllowAnonymous] //sonradan eklendi 
public ActionResult KurumsalGiris(string message="") 
{ 
    if (User.Identity.IsAuthenticated) 
     return Content("Zaten giriş yapmışsınız"); 

    ViewBag.RegistrationMessage = (string) Session["Message"]; 

    return View(); 
} 

但是,我同意@Jonathan Wood的意見,這不一定是您嘗試解決特定問題的最佳方法。儘管如此,作爲一種通用技術,值得了解。

+0

我沒有想過使用會議..有趣..謝謝讓我使用它 – ertan2002 2013-02-21 16:03:43

2

你應該在這種情況下使用TempData的

if (createStatus == MembershipCreateStatus.Success) 
{   
    TempData["Message"] = "You have registered successfully"; 

    return RedirectToAction("KurumsalGiris"); 
} 

,然後在視圖

@if (TempData["Message"] != null) 
{ 
    <h2>@TempData["Message"]</h2> 
} 

或者,如果你想這樣做在控制器中,保持您的視圖與現在一樣並設置ViewBag。RegistrationMessage控制器

ViewBag.RegistrationMessage = TempData["Message"]; 
+0

哇,多數民衆贊成偉大..我認爲TempData是類似ViewBag或ViewData ..然後我沒有嘗試它但它的工作原理是什麼..你更喜歡使用Session還是TempData?謝謝 – ertan2002 2013-02-21 16:07:33

+0

我會給你+1提到我不瞭解的ASP.NET MVC(第一次聽說TempData類)的內容,但在閱讀它的作用和工作原理後,我認爲它是一個滑稽的使用它。我只是沒有看到這種東西的地方... – Icarus 2013-02-21 16:09:27

+0

我肯定會在會話中使用TempData。將TempData視爲重定向數據。 – 2013-02-21 16:13:09