2017-06-24 261 views
0

我有一個輸入很少的表格,name,email,message和一些checkboxes。我爲這些輸入創建了一個模型並設置了我需要的所有驗證。從模型傳遞到下一個控制器從視圖

但是現在我也想通過我的模型(即從@model MyModel)或者我的模型的某些對象屬性以及這些輸入。

正在填充VewBag/viewData與我的模型的路要走嗎?

@{ 
     ViewBag.MyModel = Model; 
     // or ViewBag.ThatProperty = Model.ThatProperty 
} 

還是我還有更好的方法了我的袖子?

回答

1

ViewBag and ViewData堅持一次從服務器到客戶端,而不是相反。

無法將視圖中的對象傳遞給控制器​​。如果它是數據庫對象,則可以使用下面描述的兩種方法之一傳遞對象標識,然後在後期查詢數據庫。

如果您沒有其他辦法,可以將對象編碼爲JSON字符串(例如使用Newtonsoft包),並使用下面介紹的兩種方法之一傳遞它,但這不是最佳選擇。

要通過從視圖到控制器的特性,你有兩個選擇:

  • URL參數
  • 隱藏字段

URL參數

<form ... asp-route-ThatProperty="@Model.ThatProperty"> 
... 
</form> 

表單字段

<form> 
<input type="hidden" name="ThatProperty" value="@Model.ThatProperty" /> 
</form> 

控制器動作

如果 'ThatProperty' 沒有你的模型存在,接受它作爲一個額外的參數。

public IActionResult MyAction (MyModel model, string ThatProperty) 
{ 
    ... 
} 
+0

問題是'ThatProperty'是一個對象不是簡單的屬性如'int'或'string' –

+0

沒有辦法從View到控制器傳遞的對象。如果它是一個數據庫對象,那麼您可以傳遞對象的Id並在表單上查詢數據庫。 –

+0

我明白了。謝謝。我將只提取相關的屬性。 –

相關問題