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 クラスに入れてみましたが、そのクラス内からショップ名にアクセスできませんでした。

これは私が使用しようとしているコントローラーアクションです:

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

これを解決する方法はありますか?

編集

この Semi は機能しますが、リモート検証はまだ 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>
}
4

1 に答える 1

0

次の回答を見てください。あなたが試したように、私は製品を独自のクラスにします。ページのレンダリングされた 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 
}
于 2012-06-07T21:24:09.167 に答える