1

我正在尝试将消息传递给另一个视图(实际上是相同的控制器)我可以做得很好,但是对我来说有问题..

我是网络新手,看起来不太好..

问题

这里是我的 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>

所以我不知道如何以不同的方式将值传递给另一个视图。我不想在地址栏上显示这种消息并且用户必须更改它。

其次,我可以用“获取”方法吗?

4

4 回答 4

3

你为什么不只是返回一个不同的视图而不是重定向?事实上,首先发布的代码应该发布到一个控制器,该控制器返回一个成功登录的视图。

事实上,如果用户刚刚登录,您为什么要重定向到要求用户登录的页面?

其他可能的选项包括加密 URL 中的字符串,或者只是在 URL 中传递一个标志,控制器将其转换为相应的字符串。

于 2013-02-21T15:56:27.927 回答
2

您要做的不是返回 RedirectToAction,而是直接返回 View:(第二个参数是模型,您可以使用相同的模型类 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>");

关于您的最后一个问题,如果您的 URL 中显示消息,您正在使用 GET 方法,如果您返回视图而不是重定向,它将避免在 URL 中显示任何内容

于 2013-02-21T16:01:55.903 回答
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"];
于 2013-02-21T16:02:05.353 回答
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 的观点,这不一定是解决您试图解决的特定问题的最佳方法。尽管如此,作为一种通用技术,它还是值得了解的。

于 2013-02-21T15:56:34.837 回答