C# 带有可选参数的.net MVC操作
我希望控制器接受/Details/1和/User/xxx,但不接受/User/ 我尝试如下=>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
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分钟,我会添加一个答案。