2017-05-16 36 views
1

我想該控制器將接受/詳細信息/ 1 /用戶/ XXX而不/用戶/.NET MVC行動與可選參數

和我嘗試它像下面=>

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); 
    } 

我希望這(上述豪宅),用戶可以通過/詳細信息/ 1 /詳細信息/ XXX而不/詳細信息/這就是爲什麼我添加條件檢查=>

 if (((id ?? 0) == 0) && name == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

,但我想運行的代碼編譯器給我的錯誤像=> enter image description here 我在想,是完美的,但我不知道爲什麼做錯了=我試過=>

public ActionResult Details(int? id, string? name) 
    { 
    } 

這也使我有同樣error.i搜索關於這個問題,我發現=> ASP.NET MVC Overriding Index action with optional parameter

我不理解任何東西。這就是爲什麼我擺出這樣的問題。 如果有人能幫助我,這將會很棒嗎?

+2

'string'已經可以爲空。但是你不能有2個可爲空的值作爲參數和使用路由(你只能生成'/ Details?name = xxx' - 如果你使用'/ Details/xxx',那麼這兩個參數都是'null',你的代碼將始終返回'BadRequest') –

+0

@StephenMuecke public ActionResult Details(int id = 0,string name = null)會返回一個錯誤的請求....是否有任何方法可以解決此問題,或者我需要遵循其他結構 –

+0

只需要一個參數('string'),然後檢查它是否可以被解析爲'int' –

回答

4

string已經爲空的如此Nullable<string>string?就沒有任何意義。但是,您不能有2個可爲空的參數並實現您想要的路線。路由引擎無法知道應該綁定哪個參數,並且如果您要使用../Details/xxx,那麼這兩個值都將是null,並且您將始終返回HttpStatusCode.BadRequest

您可以使用2種獨立的方法(如DetailsByIDDetailsByName)和路由定義來實現此目的,但是如果您只需要一種方法,則只能有一個參數來計算所有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

請勿使用Nullable<string>,因爲您不需要,也沒有任何意義。

string已經接受null值,那意味着已經是nullable

短的例子:

string myString=null; 
0

您需要添加可空值類型,如int,demical,日期時間等,。

字符串是引用類型,因此它允許默認爲空