2013-07-10 26 views
0

試圖掌握如何將以下數據作爲模型傳回控制器。我想要消耗模型並在之後將所有內容添加到數據庫中。當我將表格提交給控制器時,模型是空的。是否因爲其他東西都是空的?我是否必須將其他所有內容都作爲隱藏字段傳回?在進入控制器之前,如何對視圖進行排序?將模型傳回帶有複選框的控制器返回爲空

我控制器基本上反序列化的XML文件看起來像這樣回到視圖

<category> 
    <id>1</id> 
    <description>movies</description> 
    <genre> 
     <genres> 
      <id>1</id> 
      <name>comedy</name> 
     </genres> 
     <genres> 
      <id>2</id> 
      <name>action</name> 
     </genres> 
     <genres> 
      <id>3</id> 
      <name>adventure</name> 
     </genres> 
     <genres> 
      <id>4</id> 
      <name>drama</name> 
     </genres> 
     <genres> 
      <id>5</id> 
      <name>romance</name> 
     </genres> 
    </genres> 
</category> 

查看/形式如下

<form> 
    <ul> 
    @for (int x = 0; x < Model.categories[i].genres.Count(); x++) 
    { 
     <li> 
      <label for="@Model.categories[i].genres[x].name"> 
      <input type="checkbox" name="@Model.categories[i].genres[x].name" value="@Model.categories[i].genres[x].id" checked="@Model.categories[i].genres[x].selected" /> @Model.categories[i].genres[x].name 
      </label> 
     </li> 
    } 
    </ul> 
    </form> 

回答

1

給你所有的複選框一個固定的名字,如GenreIds。

然後,在您的操作中,您應該收到一個string[] genreIds參數。

發佈表單時,genreIds作爲數組發佈,所以它必須在數組參數中接收。

如果這不起作用,因爲您有很多類別,並且希望接收每個GenreIds類別的自己的組,那麼您可以發送表單值的JSON表示並在服務器端接收和反序列化它。要做到這一點:

剃刀上的模板:

  1. 使用類型名稱來命名所有的複選框,在每個類別

處理窗體SUMIT事件,以及:

  1. 使用jQuery serializeArray,把所有的形式的元素中的陣列
  2. 然後使用JSON.stringify將此數組轉換爲JSON格式
  3. 最後將此字符串複製到具有固定名稱的隱藏字段併發布表單。即在名爲「serializedFormValues」

在服務器端的隱藏字段:

  1. 參數添加到名爲「serializedFormValues」,並輸入你的行動=字符串
  2. 獲得的價值此參數和反序列化所接收到的JSON字符串,如果你使用JSON.NET你可以轉換JSON to XML,或to an anonymous type object用它在服務器端

。還有另一種可能性。請記住,在任何情況下,類型ID將始終爲string[](或int,如果情況如此),並且此數組將僅包含檢查的值。

「手動」處理Request.Form存在最後的可能性。但是這很難做到。

0

嘗試使用CheckboxFor而不是輸入標籤。

至於您的代碼,您沒有與您的複選框關聯的ID。你應該如何在控制器中接收它?

+0

我把它作爲值 totalnoob

相關問題