2014-04-30 53 views
1

我是MVC中的新成員,並且存在關於模型如何從視圖傳回控制器的原理問題。將模型從視圖傳遞迴控制器的兩種方式

以通常的方式,模型對象來自控制器,將其數據「擴散」到視圖的字段中,然後消失。然後數據將被傳回給控制器的FormCollection對象重新收集。

但是,還有另一種模型對象本身可以作爲例如路由對象傳遞迴控制器的方式。 ActionLink,URL-Action或其他。那麼就沒有必要傳播和重新收集所有的數據。

在我的工作場所中,另一種方式被阻止,我在鏈接字符串中收到關於禁止字符的警告。在調查這個問題時,我發現另一種方式似乎大多是未知的。 由於很多原因,我認爲將模型對象傳回而不是精心重新收集數據會好得多。

那麼請好奇的原因是什麼?

更新:新增視圖 - 實例

@model MvcApplication2.Models.TestClass 
@{ 
    @(Model.TestValue = 111); 
} 

<a href="@Url.Action("ValueBack", Model)"> 
    <span>Test</span> 
</a> 



public void ValueBack(MvcApplication2.Models.TestClass testClass) 
{ 
    int x = testClass.TestValue; 
} 

回答

1

在MVC中,我們可以通過3種方式獲得在控制器形式的值。

  • 使用FormCollection對象。
  • 使用參數。
  • 強類型模型綁定到視圖。

我認爲這是不可能通過ActionLink的發送模型到控制器(作爲ActionLink的輔助生成點擊它時,發送GET請求到服務器的錨標籤)

的另一個方法:

Send the id of current model so that the controller action can fetch it back from the datastore from which it initially fetched it when rendering the View.

查看:

@Ajax.ActionLink(
    "Next", 
    "Step", 
    new { 
     StepId = 2, 
     id = Model.Id 
    }, 
    new AjaxOptions { UpdateTargetId = "stepContainer" }, 
    new { @class = "button" } 
) 

控制器:

public ActionResult Step(int StepId, int id) 
{ 
    var model = Repository.GetModel(id); 
    //Code 
} 
+0

報價霓虹燈-X:「我認爲這是不可能通過的ActionLink到模型發送到控制器」 我添加了一個小例子(與「VS-製成表達爲Web「)。 路由模型對象返回後,x中的值爲111。 – Druu

相關問題