2012-06-07 86 views
0

我有一個頁面與相同的輸入框添加了很多次。將一些項目添加到模型列表中?

@Html.TextBoxFor(m => m.Product) 
@Html.TextBoxFor(m => m.Product) 
@Html.TextBoxFor(m => m.Product) 

如何將其綁定到模型。

我已經試過:

public class Shop 
    {    
     public string ShopName { get; set; } 

     [Remote("ProductExists", "Account", AdditionalFields = "ShopName", ErrorMessage = "Product is already taken.")] 
     public List<String> Product { get; set; } 
} 

但我只能看不到第一個字段中的數據。我也試過:

@Html.TextBoxFor(m => m.Product[0]) 
@Html.TextBoxFor(m => m.Product[1]) 
@Html.TextBoxFor(m => m.Product[2]) 

但遠程驗證不起作用,所以我有點難倒在這裏。我想要實現的基本目標是將商品清單發送給商店,以便通過遠程調用功能來驗證它。我試圖把產品放在自己的公共課堂上,但是後來我無法從該課堂中訪問商店名稱。

這是控制器動作,我嘗試使用:

public JsonResult ProductExists(List<String> Product, string ShopName) 

任何想法我怎麼能解決這個問題將這麼多的讚賞?

編輯

這個半的工作,但遠程驗證仍然不流通SHOPNAME:

public class Shops 
{ 
    [Required] 
    public string ShopName { get; set; } 
    public List<Products> Product { get; set; } 
} 


public class Products 
{ 
    [Required] 
    [Remote("ProductExists", "Home", AdditionalFields = "ShopName", ErrorMessage = "Product is already taken.")] 
    public String Product { get; set; } 
} 

控制器動作:

public JsonResult ProductExists(List<String> Product, string ShopName) 
    { 

     return Json(true, JsonRequestBehavior.AllowGet); 


    } 

查看:

@model Shop.Models.Shops 


@{ 
ViewBag.Title = "Shop"; 
} 

<h2>Shop</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Shop</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.ShopName) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.ShopName) 
     @Html.ValidationMessageFor(model => model.ShopName) 
    </div> 



    <div class="editor-field"> 
     @Html.EditorFor(model => model.Product[0]) 
     @Html.ValidationMessageFor(model => model.Product[0]) 
    </div> 


    <div class="editor-field"> 
     @Html.EditorFor(model => model.Product[1]) 
     @Html.ValidationMessageFor(model => model.Product[1]) 
    </div> 


    <div class="editor-field"> 
     @Html.EditorFor(model => model.Product[2]) 
     @Html.ValidationMessageFor(model => model.Product[2]) 
    </div> 


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

</fieldset> 
} 
+0

文本框的數量由控制器動態給出一個數字或取決於有多少要添加的用戶? –

+0

取決於用戶想要添加的數量!現在我只想做一個簡單的例子 – Sparkle

+0

您可以檢查ShopName和Product文本框並查看名稱設置爲?我也認爲在你的控制器行爲應該是'串產品'而不是'列表產品' – keshav

回答

0

看看下面的answer。我會像你一樣嘗試讓產品獨立上課。拍攝頁面呈現的html代碼並查看ShopName文本框的字段名稱。我認爲它應該是ShopName,如果是這樣的話,你不需要改變AdditionalFields屬性,如果不改變它的名字。

因此,像這樣:

public class Shop 
{    
     public string ShopName { get; set; } 

     public List<Products> Product { get; set; } 
} 


public class Products 
{ 

     [Remote("ProductExists", "Account", AdditionalFields = "ShopName", ErrorMessage = "Product is already taken.")] 
     public String Product { get; set; } 
} 

在你看來做這樣的事情:

foreach(var item in Model.products) 
{ 
    @Html.TextBoxFor(item => item.product) // not sure if the syntax is right 
} 
+0

我試過這個,但我不確定ShopName值是可見的Products類,因爲它只是傳遞一個空值每時每刻。 – Sparkle

+0

近乎成功!我很確定[Remote]有一個錯誤,因爲我厭倦了一百萬件事情,它總是在第一個項目後返回空白。 – Sparkle