2013-07-08 63 views
1

我有一個實體,其變量集名爲ExtendedProperty,它們有一個鍵和一個值。在ASP中獲取具有未知數量變量的帖子數據MVC

在我的HTML Razor視圖,我有這樣的:

如何訪問我的控制器上的這個數據,一旦用戶填寫它?有沒有辦法做到這一點,以便我可以使用模型綁定而不是手動html?

編輯=請注意,我仍在使用模型,並且在表單中還有其他東西使用像@Html.EditFor(m => m.prop)之類的東西。但我找不到一種方法來整合這些可變屬性。

謝謝。

+0

如果您將輸入名稱爲Properties [0 ] ....屬性[n],模型聯編程序會將其轉換爲名爲Properties的模型上的IEnumerable屬性 – cadrell0

+0

如何將此與我的模型類集成? – elite5472

+1

@ elite5472請看看我在http://stackoverflow.com/questions/17450772/asp-net-mvc4-dynamic-form-generation/17451048#17451048的回答。我相信這是同樣的問題。 –

回答

2

讓我們假設你有以下Model視圖模型,我喜歡):

public class ExtendedProperties 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 

} 

public class MyModel 
{ 
    public ExtendedProperties[] Properties { get; set; } 
    public string Name { get; set; } 
    public int Id { get; set; } 
} 

您可以使用類似這樣的標記模式綁定到一個視圖:

@using (Html.BeginForm("YourAction", "YourController", FormMethod.Post)) 
{ 
    <input type="text" name="Name" /> 
    <input type="number" name="Id" /> 

    <input type="text" name="Properties[0].Name" /> 
    <input type="text" name="Properties[0].Value" /> 
    ... 
    <input type="text" name="Properties[n].Name" /> 
    <input type="text" name="Properties[n].Value" /> 
} 

最後,您action:

[HttpPost] 
public ActionResult YourAction(MyModel model) 
{ 
    //simply retrieve model.Properties[0] 
    //... 
} 
+0

這工作,謝謝! – elite5472

+0

@ elite5472不錯,謝謝你的反饋。 –

5

您是否嘗試過使用傳遞給控制器​​方法的FormCollection對象?

[HttpPost] 
public ActionResult Index(FormCollection formCollection) 
{ 
    foreach (string extendedProperty in formCollection) 
    { 
    if (extendedProperty.Contains("Property-")) 
    { 
     string extendedPropertyValue = formCollection[extendedProperty]; 
    } 
    } 

    ... 
} 

我會嘗試遍歷該集合中的項目。