2015-08-27 80 views
0

我正在一個MVC6應用程序,我想要一個按鈕將視圖的模型發佈到控制器。我有使用taghelper下面的標記 -MVC6 Taghelper發佈模型到控制器

<a asp-route-area="MyArea" asp-controller="MyController" asp-action="MyAction">Save</a> 

這裏是認爲我的模型聲明 -

@model MyObject 

這裏是我的控制器操作 -

public IActionResult MyAction(MyObject mo) 
{    
    return new EmptyResult(); 
} 

當我點擊按鈕,它被正確地路由到控制器,但模型對象爲空。 如何讓整個模型在點擊按鈕後回傳給控制器?

僅供參考 - 此處我的目標是在窗體上有多個按鈕,根據點擊按鈕將視圖的模型發佈到不同的mvc控制器。

編輯 - 我不一定需要它發佈到不同的控制器/操作。我能夠讓控制器決定如何處理,而這似乎是我所需要的。

+0

如果你想發佈,那麼你需要使用一個表單和一個按鈕或輸入type = submit和模型屬性必須對應於表單中的元素。一個鏈接/定位標記只會在未提交任何模型的情況下發出獲取請求,不會發布任何內容,如果您想要使用不同的按鈕發佈到不同的控制器/操作的表單,則只是鏈接 –

+0

,然後你將需要添加一些JavaScript來點擊按鈕來改變表單動作,然後提交表單。 –

+0

我結束了以下提到的過程 - https://visualstudiomagazine.com/articles/2014/11/01/performing-multiple-actions.aspx – czuroski

回答

0

我最終使用了概述here的解決方案。 從本質上講,它的工作方式是創建兩個不同名稱的按鈕,並讓控制器使用按鈕名稱參數。然後我只是檢查這些參數,如果它們有價值,我就以這種方式處理。

+1

您提到過,您想將ViewModel發佈到* different * mvc控制器點擊按鈕。您提到的文章將ViewModel發佈到* same * Controller的* same * ActionResult。然後,在那個ActionResult中,你有邏輯檢查哪個按鈕被點擊。這是你真正想要的嗎?否則就像@Joe Audette提到的那樣,改變表單標籤的* action *屬性是一種方法。 – Vlince

+0

我實際上必須根據點擊執行不同的處理。我原本打算用不同的控制器/動作完成這個任務,但現在我可以調用一個控制器並執行我所需要的工作。我也可以讓我的單一控制器動作重定向到所需的控制器。 – czuroski

0

你可以在按鈕中使用HTML表單操作

類似:

<form action="/submitNormal" method="get"> 
    First name: <input type="text" name="fname"><br> 
    Last name: <input type="text" name="lname"><br> 
    <button type="submit">Submit normal</button><br> 
    <button type="submit" formaction="="/submitDifferent">Submit different</button> 
</form> 

不知道瀏覽器的支持。

+0

這將工作獲取操作,但我需要執行一個職位。 – czuroski

+0

將方法更改爲「發佈」 –