2

返回null這是我的模型:爲什麼我的HTTP POST從我的視圖模型

public class Attribute 
{ 
    public string Key { get; set; } 
    public string Value{ get; set; } 
} 

我填補它在我的GET創建

public ActionResult Create() 
    { 
     var Attributes = new[] 
     { 
      new Attribute {Key = "Name" Value = "" }, 
      new Attribute {Key = "Age" Value = "" }, 
     }; 
     return View(Attributes); 
    } 

我的視圖看起來是這樣的:

@model IEnumerable<Customers.ViewModels.Attribute> 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 
     @foreach (var item in Model) 
     { 
      <div class="editor-label"> 
       @Html.Label(item.Key) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(m => item.Value) 
       @Html.ValidationMessageFor(m => item.Value) 
      </div> 
     } 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

Then My Post Create看起來像這樣:

[HttpPost] 
    public ActionResult Create(IEnumerable<Attribute> attributes) 
    { 
    } 

但我的IEnumerable<Attribute> attributes爲空。有什麼建議麼?

+0

您的GET返回屬性不屬性 –

+0

是的,它的假設是 – Pittfall

+0

好吧,我看到你期待一個IEnumerable <>,我的錯,對不起 –

回答

3

您需要爲Attribute創建編輯器模板,然後將List<Attribute>模型傳遞給它。

@Model Attribute 
<div class="editor-label"> 
    @Html.LabelFor(m => m.Key) 
</div> 

<div class="editor-field"> 
    @Html.EditorFor(m => m.Value) 
    @Html.ValidationMessageFor(m => item.Value) 
</div> 

您認爲使用:

<fieldset> 
    @Html.EditorFor(m > m) 

    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 

你需要這樣做,因爲foreach沒有爲元素創建正確的名稱。

+0

這個工程,但你能解釋爲什麼我必須這樣做再多一點?我還沒有完全理解它。 – Pittfall

+0

另外,如果我的模型中有一個值不用於視圖,那麼我可能只是將它用於邏輯,我如何能夠在一篇文章中保留它的價值? – Pittfall

+0

當您傳遞對象列表時,您的html元素名稱必須具有此格式'Attribute [0] .Property'。如果你檢查你的html,你會注意到foreach沒有呈現它。 – MuriloKunze

相關問題