2017-08-16 92 views
0

我有一個擁有這兩種操作方法的客戶控制器。如何在.NET Core中獲得發佈值

[HttpGet] 
    public IActionResult Create() 
    { 
     ViewBag.Title = "Customers"; 
     return View(); 
    } 

    [HttpPost] 
    public IActionResult Create(IFormCollection form) 
    { 
     return View(); 
    } 

我還創建了一個Customer view。

<form class="form-horizontal" method="post" action="/Customer/Create"> 
    <div class="form-group"> 
     <label class="col-lg-2 control-label">FirstName *</label> 
     <div class="col-sm-6"> 
      <input type="text" class="form-control" required name="FirstName"> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label class="col-lg-2 control-label">LastName *</label> 
     <div class="col-sm-6"> 
      <input type="text" class="form-control" required name="LastName"> 
    </div> 
</div> 
</form> 

如何獲取發佈值?每次我提交表格時,都會轉到[HttpGet],我想使用[HttpPost]。我是ASP.NET Core的新手,對於簡單的問題感到抱歉。

+0

在你的例子中,你不能有兩個具有相同名字和相同類型參數的方法:它甚至不會編譯。 –

+0

你的權利我忘了我加了這個參數。我試圖儘量減少我的代碼在這裏發佈。 IFormCollection形式 – user3862830

回答

2

加入2參數,它與你的表單元素符合HTTP POST操作方法的任何值的模型參數。

[HttpPost] 
public IActionResult Create(string firstName,string lastName) 
{ 
    return View(); 
} 

另一種選擇是創建具有匹配的屬性的視圖模型類以形成元素名稱。如果表單中有許多輸入元素,並且不希望將混亂添加到操作方法的參數列表中,這很有用。

public class LoginVm 
{ 
    public string FirstName { set;get;} 
    public string LastName { set;get;} 
} 

[HttpPost] 
public IActionResult Create(LoginVm model) 
{ 
    // to do : user model.FirstName and model.LastName 
    return View(); 
} 

當表單提交,該模型粘合劑將讀取張貼形式數據並將其映射到視圖模型對象的屬性值。

請記住,視圖模型特定於視圖。因此,如果您的視圖(表單)發送5個字段,請創建一個僅包含這5個字段的簡單POCO視圖模型。

+0

我有更多的輸入。我只是添加了這些以保持我的問題簡短。我想要一個方法來檢索請求主體中的所有輸入。 – user3862830

+0

您應該使用第二種方法,創建視圖模型來處理表單文章。這是處理它的乾淨方式。 – Shyju

0

幾種方法:

  • 添加FirstNameLastName(不區分大小寫)字符串參數接受後
  • IFormCollection類型的參數添加到這個相同的方法,並訪問指定的值Create方法FirstNameLastName
  • 直接訪問HttpContext.Request.Form的值
  • 訪問012中的值財產
  • 添加保存一個POCO類,你要提交
+0

當我添加IFormCollection參數我的表單不會擊中[HttpPost]它只會去[HttpGet]。如何讓我的HTML表單轉到[HttpPost]? – user3862830

+0

你可以添加一個'[ActionName(「Index」)]'屬性到可以通過GET調用的'Create'方法嗎? –