Asp.net mvc 在Asp.net MVC中将值从视图传递到控制器

Asp.net mvc 在Asp.net MVC中将值从视图传递到控制器,asp.net-mvc,view,viewbag,Asp.net Mvc,View,Viewbag,我正在尝试将消息传递给另一个视图(实际上是同一个控制器),我可以做得很好,但我遇到了一个问题 我是网络新手,看起来不太好 这是我的c代码 这是html的一面 @model E_Cv.Models.LogOnModel @{ ViewBag.Title = "Kurumsal Giriş"; } <h2>Kurumsal Giriş</h2> <h2>@ViewBag.RegistrationMessage</h2> <p&g

我正在尝试将消息传递给另一个视图(实际上是同一个控制器),我可以做得很好,但我遇到了一个问题

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

这是我的c代码

这是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>
@model E\u Cv.Models.LogOnModel
@{
ViewBag.Title=“Kurumsal Giriş”;
}
Kurumsal Giriş
@ViewBag.RegistrationMessage

请输入您的用户名和密码。
@ActionLink(“Yeni Kurum Kaydı”,“KurumsalKayit”)
如果你没有账户。

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


第二,我可以用“Get”方法吗?

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

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


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

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

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


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

如果问题是如何在不使用querystring的情况下在控制器之间传递数据,那么一个选项就是会话对象

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的观点,即这不一定是解决您试图解决的特定问题的最佳方法。不过,作为一种通用技术,它还是值得了解的。

如果问题是如何在不使用querystring的情况下在控制器之间传递数据,那么一个选项就是会话对象

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的观点,即这不一定是解决您试图解决的特定问题的最佳方法。不过,作为一种通用技术,它还是值得了解的。

您要做的不是返回重定向操作 您可以直接返回视图:(第二个参数是一个模型,您可以使用相同的模型类E_Cv.Models.LogOnModel向其添加RegistrationMessage属性)

返回视图(“”,
新E_Cv.Models.LogOnModel{
RegistrationMessage=“您已成功注册”
});
或者像以前那样将数据保存在ViewBag中:

ViewBag.RegistrationMessage = "You have registered successfully";
return View("<name of the view>");
ViewBag.RegistrationMessage=“您已成功注册”;
返回视图(“”);

关于你的最后一个问题,如果消息显示在你的URL中,你正在使用GET方法,如果你返回一个视图而不是重定向,它将避免在URL中显示任何内容 您可以直接返回视图:(第二个参数是一个模型,您可以使用相同的模型类E_Cv.Models.LogOnModel向其添加RegistrationMessage属性)

返回视图(“”,
新E_Cv.Models.LogOnModel{
RegistrationMessage=“您已成功注册”
});
或者像以前那样将数据保存在ViewBag中:

ViewBag.RegistrationMessage = "You have registered successfully";
return View("<name of the view>");
ViewBag.RegistrationMessage=“您已成功注册”;
返回视图(“”);

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

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

    return RedirectToAction("KurumsalGiris"); 
}
然后在你看来

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

在这种情况下,您应该使用TempData

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

    return RedirectToAction("KurumsalGiris"); 
}
然后在你看来

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

谢谢您的回答@Jonothan,是的,用户已注册,但我需要通过电话确认。因为网站的这一部分是面向公司的。然后在我确认之前不能记录它们。这就是我这样做的原因。信息会比那条长。那么即使是被屏蔽的消息也不会看起来很好。。谢谢。谢谢您的回答@Jonothan,是的,用户已注册,但我需要通过电话确认。因为网站的这一部分是面向公司的。然后在我确认之前不能记录它们。这就是我这样做的原因。信息会比那条长。那么即使是被屏蔽的消息也不会看起来很好。。谢谢你。我从来没有想过使用会话。。有意思。。谢谢你让我用它我从没想过要用它。。有意思。。谢谢你让我用哇那太好了。。我认为TempData与ViewBag或ViewData类似。。然后我没有试过,但它是我想要的。。您喜欢使用会话还是临时数据?谢谢你,如果你提到ASP.NET MVC(我第一次听说
TempData
类),我会给你+1,但是在阅读了它的功能和工作原理后,我认为使用它是一种讽刺。我只是看不到这样的地方…我肯定会在会话中使用TempData。将TempData视为重定向数据。我理解它,非常感谢。。使用tempdata是非常有用的信息。。thanxwow太好了。。我认为TempData与ViewBag或ViewData类似。。然后我没有试过,但它是我想要的。。您喜欢使用会话还是临时数据?谢谢你,如果你提到ASP.NET MVC(我第一次听说
TempData
类),我会给你+1,但是在阅读了它的功能和工作原理后,我认为使用它是一种讽刺。我只是看不到这样的地方…我肯定会在会话中使用TempData。把TempData看作重定向数据。我理解,谢谢