Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# 带有可选参数的.net MVC操作_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 带有可选参数的.net MVC操作

C# 带有可选参数的.net MVC操作,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我希望控制器接受/Details/1和/User/xxx,但不接受/User/ 我尝试如下=> public ActionResult Details( Nullable<int> id, Nullable<string> name) { if (((id ?? 0) == 0) && name == null) { return new HttpStatusCodeResult(Ht

我希望控制器接受/Details/1和/User/xxx,但不接受/User/

我尝试如下=>

    public ActionResult Details( Nullable<int> id, Nullable<string> name)
    {
        if (((id ?? 0) == 0) && name == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        Instructor instructor = db.Instructors.Where(x => x.InstructorId == id || x.faculty_name.Equals(name)).SingleOrDefault();

        if (instructor == null)
        {
            return HttpNotFound();
        }

        ViewBag.faculty_active = MyCustomFunctions.UserActivity();
        return View(instructor);
    }
但是我想运行编译器给我的错误代码,比如=> 我认为这很完美,但我不知道a为什么做错了=我试过=>

    public ActionResult Details( int? id, string? name)
    {
    }
这也给了我同样的错误。我搜索了这个问题,发现=>

我什么都不懂。这就是我提出这类问题的原因。 如果有人能帮我的话,这将是非常好的。不要使用
Nullable
,因为你不需要也没有意义

string
已经接受了
null
值,这意味着它已经可以
null

简短示例:

string myString=null;
不要使用
Nullable
,因为您不需要也没有意义

string
已经接受了
null
值,这意味着它已经可以
null

简短示例:

string myString=null;

您需要为值类型添加Nullable,如int、demical、DateTime等


String是一种引用类型,因此默认情况下它允许空值

您需要为值类型(如int、demical、DateTime等)添加可空值


字符串是一种引用类型,因此默认情况下它允许空值

字符串
已可空值,因此
可空值
字符串?
没有意义。但是,您不能有2个可为空的参数并实现所需的路由。路由引擎无法知道应该绑定哪些参数,如果要使用
。/Details/xxx
,这两个值都将
null
,并且始终返回
HttpStatusCode.BadRequest

您可以使用两个单独的方法(例如
DetailsByID
DetailsByName
)和路由定义来实现这一点,但是如果您想要一个方法,那么您只能有一个参数来说明所有3个路由。在该方法中,您可以尝试将值解析为
int

public ActionResult Details(string id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    int number;
    Instructor instructor;
    bool isInt = Int32.TryParse(id, out number);
    if (IsInt)
    {
        instructor = db.Instructors.Where(x => x.InstructorId == number).SingleOrDefault();
    }
    else
    {
        instructor = db.Instructors.Where(x => x.faculty_name.Equals(id)).SingleOrDefault();
    }
    if (instructor == null)
    {
        return HttpNotFound();
    }
    ViewBag.faculty_active = MyCustomFunctions.UserActivity();
    return View(instructor);
}

string
已经可以为空,因此
null
string?
没有意义。但是,您不能有2个可为空的参数并实现所需的路由。路由引擎无法知道应该绑定哪些参数,如果要使用
。/Details/xxx
,这两个值都将
null
,并且始终返回
HttpStatusCode.BadRequest

您可以使用两个单独的方法(例如
DetailsByID
DetailsByName
)和路由定义来实现这一点,但是如果您想要一个方法,那么您只能有一个参数来说明所有3个路由。在该方法中,您可以尝试将值解析为
int

public ActionResult Details(string id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    int number;
    Instructor instructor;
    bool isInt = Int32.TryParse(id, out number);
    if (IsInt)
    {
        instructor = db.Instructors.Where(x => x.InstructorId == number).SingleOrDefault();
    }
    else
    {
        instructor = db.Instructors.Where(x => x.faculty_name.Equals(id)).SingleOrDefault();
    }
    if (instructor == null)
    {
        return HttpNotFound();
    }
    ViewBag.faculty_active = MyCustomFunctions.UserActivity();
    return View(instructor);
}

字符串
已可为空。但是您不能将2个可为空的值作为参数并使用路由(您只能生成
/Details?name=xxx
-如果要使用
/Details/xxx
,两个参数都将
null
,并且您的代码将始终返回
BadRequest
)@StephenMuecke public ActionResult Details(int id=0,string name=null)返回给我的请求不正确……是否有任何方法可以解决此问题,或者我需要遵循其他结构只有一个参数(
string
)然后检查它是否可以解析为
int
@StephenMuecke我能理解你能给我一个小例子吗?给我20分钟,我会添加一个答案。
string
已经可以为null。但是你不能有2个可为null的值作为参数并使用路由(您将只能生成
/Details?name=xxx
-如果要使用
/Details/xxx
,两个参数都将
null
,并且您的代码将始终返回
BadRequest
)@StephenMuecke public ActionResult详细信息(int id=0,string name=null)是否返回一个错误的请求…是否有任何方法可以解决此问题,或者我需要遵循其他结构只要有一个参数(
string
),然后检查它是否可以解析为
int
@StephenMuecke我能理解,你能给我一个小例子吗?给我20分钟,我会添加一个答案。