Asp.net mvc mvc4如何在控制器中使用可空参数创建函数

Asp.net mvc mvc4如何在控制器中使用可空参数创建函数,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我有一个登录表单,如果用户输入正确的登录信息,他/她将进入我的网站 但是,如果他/她输入的信息不正确,我希望将他/她返回到他/她输入其信息的同一页面,其中字段已存档 我的意思是,我希望看到他/她在字段中输入的用户名和密码,而不是从零开始输入 我试过了 public ActionResult(Login ?login = null){} 因此,当我想用null参数显示登录页面时,我调用了这个函数。当用户输入不正确的信息时,我就调用它。然而,我去例外 类型“Login”必须是不可为null的值类型

我有一个登录表单,如果用户输入正确的登录信息,他/她将进入我的网站

但是,如果他/她输入的信息不正确,我希望将他/她返回到他/她输入其信息的同一页面,其中字段已存档

我的意思是,我希望看到他/她在字段中输入的用户名和密码,而不是从零开始输入

我试过了

public ActionResult(Login ?login = null){}
因此,当我想用null参数显示登录页面时,我调用了这个函数。当用户输入不正确的信息时,我就调用它。然而,我去例外

类型“Login”必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”

在这个问题上你帮我了吗

如果有第二种解决方案,请告诉我,但请不要谈论会员资格和这些家伙,因为我有自己的方法来衡量用户 编辑 当用户按下登录按钮时,我进入此控制器功能

public ActionResult Index()
        {
            return View();
        }
当他在登录页面中提交他的/她的表单时,我进入该功能

public ActionResult Login(Login login) {}
我想在上面的
登录
功能中,如果用户在
索引
页面中输入了不正确的信息,他/她在那里看到了他/她提交的数据

您只需使用以下方法:

// [HttpPost] and any other attributes necessary
public ActionResult YourAction(Login login)
{
    ...
}
但是考虑到您想要实现的逻辑的一般概念,我认为您不需要将登录名设置为null

该操作只做它所做的:它处理登录(在客户端完成回发之后)。因此,它必须始终包含任何数据

如果您想在对登录信息进行一些检查后重定向,您将收到这些信息,检查并执行
重定向到操作(…)
或任何其他类型的重定向

然后在视图中,您将拥有(例如,对于索引操作):


创建一个新的MVC Internet应用程序(VS模板),并查看如何在控制器中使用“Model.IsValid”。这是最常见的方法。当某个模型进入控制器时,您会检查它是否有效(重定向到主页或其他),否则您只会显示提供该模型的相同视图,该视图已经(部分)由用户发布。
这是一个:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        // do things
        return RedirectToAction("Index", "Home");
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

模型错误可能发生在隐式模型绑定期间(例如,如果传入数据中不存在某些必需的属性),也可能通过使用ModelState.addmodeleror在代码中显式设置。将html验证器放在页面上可以让用户知道对字段值应用了什么样的约束。

“Login”似乎是一个类,所以它已经nullable@jim
login
我的模型类在model Forlder中吗什么是returneURL?请?@user2208349当您使用FormAuthentication机制(ASP.NET集成)时,请在web.config文件中指定登录页面url(搜索“loginUrl”字符串)。当匿名用户试图打开仅允许经过身份验证的用户使用的url时(请参阅“AuthorizationAttribute”),服务器会自动将用户重定向到指定的登录页面。默认情况下,其url为~/Account/LogOn(参见web.config),就MVC路由而言,这意味着帐户控制器、登录操作。@user2208349…重定向时,服务器还添加了一个额外的参数-returnUrl,以便控制器操作可以知道最初访问的页面Url,并能够在成功登录时将用户重定向回。这完全不是我的问题,当用户向您输入不正确的信息+1时,我想返回登录页面,并在字段中包含信息,我感谢你的帮助、支持和努力,我真的很抱歉,因为我不能只选择一个答案,我真的非常感谢你,请原谅我没有选择你的答案,我很喜欢你,但是当用户第一次要求登录页面时,它与错误消息一起显示,他的信息不正确登录页必须使用另一个操作创建:例如,
[HttpPost]public ActionResult Login()
,不带任何参数,用于获取HTTP方法。然后呈现一些表单,该表单会将postback发送回您的操作(也可能是Login one(另一个方法),但带有一个参数和一个POST-HTTP方法).在您的编辑回答中,您说的是
或者重定向到其他页面,或者显示登录名
,那么我应该编写什么代码来重定向到包含已归档文件的页面?所有主要问题都来自将这两种方法设为相同名称是的。不要忘记使用Post/Get规范属性来防止不同的负面情况。
[HttpGet]
public ActionResult Login()
{
    // this one is called on the first entering of login and shows the form to fill
    return View(new Login()); // for instance
}

[HttpPost]
public ActionResult Login(Login login)
{
    // this one is called on PostBack after filling the form and pressing 'Login' (or something) button
    // todo:  here you to validate the login info
    // and then either do your redirect to some other page or showing the login form again

    // if(something)
    //    return RedirectToAction(...);

    return View(login);
}
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        // do things
        return RedirectToAction("Index", "Home");
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}