2016-09-13 50 views
0
[Route("add/user/{name}&{state}&{zipcode}&{indeFlag}&{email}")]  
public async Task<ActionResult> CreateUser(
       string name, 
       string state, 
       string zipcode, 
       Boolean indeFlag, 
       string email) 
{ 
} 

如何在上面的示例中定義控制器方法的Route,以便我可以將正確的數據傳遞給該方法?MVC.Net具有多個參數的控制器路徑

請幫忙。

+0

你想在這種情況下做什麼,通過這個你想通過只輸入一個網址添加用戶。沒有具體的頁面。 – Viplock

+2

這是您正在嘗試的Post操作嗎? –

+0

正如Ravi所說,這看起來應該是一個帖子,所以你應該用[HttpPost]屬性來裝飾它。 我看到你正在使用&,它使得它看起來像你試圖通過GET來做到這一點。 這將是更典型的,因爲你在請求的身體張貼這些值,作爲JSON。 然後你的路線將不包含這些參數,它只是添加/用戶,這是更容易使用。 –

回答

0

你可以通過每個參數是這樣的:

[Route("[controller]")] 
public class UserController : Controller 
{ 

    // < MVC 6 : 

    [Route("add")] 
    [HttpPost]  
    public async Task<IActionResult> Create(
       string name, 
       string state, 
       string zipcode, 
       bool indeFlag, 
       string email) 
    { 
     // Your code here 
    } 

    // If you want call this in a simple get query 
    [Route("quickadd")] 
    [HttpGet]  
    public async Task<IActionResult> Create(
       string name, 
       string state, 
       string zipcode, 
       bool indeFlag, 
       string email) 
    { 
     // Your code here 
    } 

    // MVC 6 : 

    [Route("add")] 
    [HttpPost]  
    public async Task<IActionResult> Create(
       [FromForm]string name, 
       [FromForm]string state, 
       [FromForm]string zipcode, 
       [FromForm]bool indeFlag, 
       [FromForm]string email) 
    { 
     // Your code here 
    } 

    // If you want call this in a simple get query 
    [Route("quickadd")] 
    [HttpGet]  
    public async Task<IActionResult> QuickAdd(
       [FromQuery]string name, 
       [FromQuery]string state, 
       [FromQuery]string zipcode, 
       [FromQuery]bool indeFlag, 
       [FromQuery]string email) 
    { 
     // Your code here 
    } 

} 

將URL「/用戶/添加」用數據形式。

其他的解決方案,以更好的方式,是使用一個視圖模型類,像這樣:

[Route("[controller]")] 
public class UserController : Controller 
{ 

    [Route("add")] 
    [HttpPost]  
    public async Task<IActionResult> Create(
       AddViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
       // Put your code to create user here 
     } 
     else 
     { 
       // Put your code for error here 
     } 
    } 

} 

視圖模型允許你使用數據註釋做一些檢查,像必填字段,或格式檢查。

using System.ComponentModel.DataAnnotations; 

public class AddViewModel 
{ 
    [Required(ErrorMessage = "Please enter a name")] 
    [Display(Name = "Username")] 
    [DataType(DataType.Text)] 
    public string Name { get; set; } 

    public string State{ get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    public string Email{ get; set; } 

    [Required] 
    [DataType(DataType.PhoneNumber)] 
    public string PhoneNumber{ get; set; } 

    public AddViewModel() 
    {} 
} 
+0

感謝阿德里安的詳細response.I實際上是試圖通過直接調用該控制器方法通過url和傳遞參數在url中手動添加一個新用戶。此網址只能由管理員訪問。快速添加用戶的方法。 – orangesustud

+0

哦。所以,你可以這樣做:[路線( 「快速添加」) [HTTPGET] 公共異步任務快速添加( [FromQuery]字符串名稱, [FromQuery]串狀態, [FromQuery]串郵政編碼, [ FromQuery]布爾indeFlag, [FromQuery]字符串email) {// 您的代碼在這裏 } – AdrienTorris

+0

您可以撥打像/用戶/快速添加名稱= jkdjkds和狀態的URL = kjsdjkd等,在一個簡單的GET查詢;?) – AdrienTorris

相關問題