Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC-从Void或int调用ActionView的某种方式_C#_Asp.net Mvc - Fatal编程技术网

C# ASP.NET MVC-从Void或int调用ActionView的某种方式

C# ASP.NET MVC-从Void或int调用ActionView的某种方式,c#,asp.net-mvc,C#,Asp.net Mvc,原因是不检查该帐户是否存在。我已经在控制器顶部设置了[授权]。下面的代码只是一个测试,看看在这种情况下是否可以从void或int调用RedirectToAction或类似的东西 我在一个控制器上有一个公共int GetPersonCode,我想这样做: public int GetPersonCode() { try { //This is setted on login return (int)Session["PersonCode"];

原因是不检查该帐户是否存在。我已经在控制器顶部设置了[授权]。下面的代码只是一个测试,看看在这种情况下是否可以从void或int调用RedirectToAction或类似的东西

我在一个控制器上有一个公共int GetPersonCode,我想这样做:

public int GetPersonCode()
{
    try
    {
        //This is setted on login
        return (int)Session["PersonCode"];
    }
    catch (Exception e)
    {
        Log(e);
        //Some way to redirect to the login
    }
}
public bool TryGetPersonCode(ref int value)
{
    try
    {
        //This is setted on login
        value = (int)Session["PersonCode"];
        return true; // Success
    }
    catch (Exception e)
    {
        Log(e);
        return false; // Failed
    }
}
有没有办法做到这一点


谢谢。

您的问题有点不清楚,但是如果您想只允许已验证用户执行该操作,则应使用该属性对您的操作甚至整个控制器进行注释,MVC将自动将用户重定向到验证页面,以便当前会话能够访问该操作

您还可以通过其roles属性使用Authorize属性指定角色

更新


如果您想打开不同的视图,请在需要时使用。

您的要求有点不清楚,但如果您想只允许已验证用户执行此操作,您应该使用该属性对您的操作甚至整个控制器进行注释,MVC将自动将用户重定向到身份验证页面,以便当前会话能够访问该操作

您还可以通过其roles属性使用Authorize属性指定角色

更新


如果要打开另一个视图,请在需要时使用。

假设您正在尝试检查帐户是否存在,或者用户是否已登录(无论哪个帐户),并且如果出现错误,您只想将用户重定向到另一个页面,您可以执行以下操作:

将int GetPersonCode更改为bool TryGetPersonCoderef int值。它看起来像这样:

public int GetPersonCode()
{
    try
    {
        //This is setted on login
        return (int)Session["PersonCode"];
    }
    catch (Exception e)
    {
        Log(e);
        //Some way to redirect to the login
    }
}
public bool TryGetPersonCode(ref int value)
{
    try
    {
        //This is setted on login
        value = (int)Session["PersonCode"];
        return true; // Success
    }
    catch (Exception e)
    {
        Log(e);
        return false; // Failed
    }
}
然后在调用GetPersonCode的方法中,改为执行以下操作:

int value; // This value will be changed inside 'TryGetPersonCode()'
if (TryGetPersonCode(ref value))
{
    // Success, do whatever you need with 'value'
}
else
{
    // Failed, 'value' will still be null
    // Here you can do your redirect
    RedirectToAction("Login Failed Action");
}
这种类型的功能在.NET Framework中很常见。布尔返回值指示它是否工作。如果返回true,则您的值变量将在方法中设置。否则,将不会设置value变量,并且该方法将返回false,这表示出现了问题


我希望这对您有所帮助,祝您工作顺利:

假设您正在尝试检查帐户是否存在,或者用户是否已登录(无论哪个帐户),如果出现错误,您只想将用户重定向到另一个页面,您可以执行以下操作:

将int GetPersonCode更改为bool TryGetPersonCoderef int值。它看起来像这样:

public int GetPersonCode()
{
    try
    {
        //This is setted on login
        return (int)Session["PersonCode"];
    }
    catch (Exception e)
    {
        Log(e);
        //Some way to redirect to the login
    }
}
public bool TryGetPersonCode(ref int value)
{
    try
    {
        //This is setted on login
        value = (int)Session["PersonCode"];
        return true; // Success
    }
    catch (Exception e)
    {
        Log(e);
        return false; // Failed
    }
}
然后在调用GetPersonCode的方法中,改为执行以下操作:

int value; // This value will be changed inside 'TryGetPersonCode()'
if (TryGetPersonCode(ref value))
{
    // Success, do whatever you need with 'value'
}
else
{
    // Failed, 'value' will still be null
    // Here you can do your redirect
    RedirectToAction("Login Failed Action");
}
这种类型的功能在.NET Framework中很常见。布尔返回值指示它是否工作。如果返回true,则您的值变量将在方法中设置。否则,将不会设置value变量,并且该方法将返回false,这表示出现了问题


我希望这对你有所帮助,祝你工作顺利:

你是否可以和你是否应该是两个不同的答案。在调用此方法之前很久,您就应该已经将用户重定向到登录页面,通常这是通过Authorize属性来完成的。我知道。我在控制器上面有[授权],只是想知道这是否可能。你是否可以和你是否应该是两个不同的答案。在调用此方法之前很久,您就应该已经将用户重定向到登录页面,通常这是通过Authorize属性来完成的。我知道。我在控制器上面有[授权],只是想知道这是否可能。我知道。我在控制器顶部有[Authorize],只是想知道是否可以从这个示例上的void或int调用actionview。对不起,我的英语不好,谢谢你的回答。但这只有在你使用ActionResult并返回RedirectToAction时才有效,对吗?你也应该使用你所说的IActionResult方法。@AirtonGomesdeLima你问了你的问题,你能这样做吗,但忽略了告诉我们你需要它的技术原因?看起来你可以通过对你原来的帖子做一些澄清来消除所有的困惑。目前没有真正的需要,只是好奇的问题。我知道。我在控制器顶部有[Authorize],只是想知道是否可以从这个示例上的void或int调用actionview。对不起,我的英语不好,谢谢你的回答。但这只有在你使用ActionResult并返回RedirectToAction时才有效,对吗?你也应该使用你所说的IActionResult方法。@AirtonGomesdeLima你问了你的问题,你能这样做吗,但忽略了告诉我们你需要它的技术原因?看起来你可以通过对你原来的帖子进行一些澄清来消除所有的困惑。目前没有真正的需要,只是一个问题
好奇的刺激。希米如何告诉我,我犯了一个错误,没有说出需要的全部原因。我不需要检查登录名。我只是想检查是否可以从另一个不是ActionView的对象调用视图。但是谢谢你的回答。你可以从另一个方法返回一个视图,然后在你的ActionView方法中使用这个返回值。两个方法都会返回一个ActionView。如果你需要一个代码示例,我可以编辑我的答案。否则,请将我们的答案中的一个标记为正确。实际上,该想法将调用一个void或某个不返回action视图的东西,出于X原因或需要,该void必须调用一个不同的视图,她可以以某种方式调用,但据我所见,不存在强制从void重定向的方法,只是从行动的角度来看。我同意你所说的,没有办法做到你所要求的。返回ActionView的唯一方法是在controller方法中返回它。我相信我的答案是尽可能接近一个人,而仍然使用良好的做法。记住,正确的答案也会让你赢得声誉!希米如何告诉我,我犯了一个错误,没有说出需要的全部原因。我不需要检查登录名。我只是想检查是否可以从另一个不是ActionView的对象调用视图。但是谢谢你的回答。你可以从另一个方法返回一个视图,然后在你的ActionView方法中使用这个返回值。两个方法都会返回一个ActionView。如果你需要一个代码示例,我可以编辑我的答案。否则,请将我们的答案中的一个标记为正确。实际上,该想法将调用一个void或某个不返回action视图的东西,出于X原因或需要,该void必须调用一个不同的视图,她可以以某种方式调用,但据我所见,不存在强制从void重定向的方法,只是从行动的角度来看。我同意你所说的,没有办法做到你所要求的。返回ActionView的唯一方法是在controller方法中返回它。我相信我的答案是尽可能接近一个人,而仍然使用良好的做法。记住,正确的答案也会让你赢得声誉!