2014-12-26 95 views
0

我想,以填補ID的形式和我已經以這種方式填表與ASP.NET MVC查詢字符串

本地主機作出的URL:1613 /人/索引/ 1

其中1是Id。我想,以填補我的形式病人的ID爲1 數據,但下面這個函數不是在被稱爲控制器

public ActionResult Index(int id) 
{ 

    Patient p = new CEntities().Patients.Find(id); 


    return View(p); 
} 

相反,我進入

public ActionResult Index() 
{ 

    return View(); 
} 

我是新手在ASP.NET MVC中,我不知道用任何其他方式填充表單,我找到了一種方式,但它顯示我的整個對象在查詢字符串中是不安全的。而這個上面的解決方案是行不通的。

請建議我很好的解決方案。

+0

用'HttpGet'裝飾'Index(int id)'動作。 –

回答

2

據我所知,你不能真正的重載ASP.NET MVC中的動作方法,所以只能有一個Index動作方法(沒有任何額外的註釋)。當然,您可以定義幾個具有相同名稱的方法,但是您可能希望在action方法之上添加[HttpPost](或其他HTTP方法)註釋,以便在提交表單後使用它。

使參數可選可能會有所幫助:

public ActionResult Index(int? id){ 
     if(id.HasValue()){ 
      Patient p = new CEntities().Patients.Find(id); 
      return View(p); 
     } 
    return View(); 
     } 

請看看:Can you overload controller methods in ASP.NET MVC?

另一個建議是:儘量用腳手架和看到的模板如何給你:

1。右鍵單擊控制器文件夾

2.Add-> New Controller

3.實體框架讀/寫操作的控制器(據我記得,從頂部3日)

4.選擇模型類。

5.選擇數據庫上下文(保持與數據庫連接的類)。

6.Ok.

它會生成控制器的意見,玩得開心。

0
local-host:1613/Patient/Index/1 

此路徑應該打的動作方法:

public ActionResult Index(int id) 

請檢查您的RouteConfig.cs文件,確保您有默認路由設置正確:

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

嘗試註釋掉你的其他索引動作方法「// public ActionResult Index()」,並看看當試圖去local-host時會發生什麼:1613/Patient/Index/1