如何从asp.net mvc5中的视图访问数组值?

时间:2015-06-29 07:10:43

标签: c# asp.net asp.net-mvc

我需要在视图中为模型中的每个项目生成标签。

这是我到目前为止所做的。

Reference.cs

public class Reference
{
    private string[] itemList = { "Shirt", "T-shirt", "Denim" };


    public string[] Item {
        get{
            return itemList;
        }

        set {
            itemList = value;
        }
    }
    public int ShirtId{get;set;}
    public int TShirtId { get; set; }
    public int DenimId { get; set; }
}

index.cshtml

@model WebApplication1.Models.Reference

@{
    ViewBag.Title = "Index";
}

<h2>Update Your References Here</h2>
<br>
<p> Please type in the reference code of the item in the corresponding text box</p>
<section id="reference-update">
   @using (Html.BeginForm()) { 
        <fieldset>
            <legend> Reference Items</legend>

            <div class="form-horizontal">


                <div class="item">
                    @Html.LabelFor(model=>model.Item[0])
                </div>
                <div class="input-lg">
                    @Html.TextBoxFor(model => model.ShirtId)
                </div>
            </div>
        </fieldset>
   }
</section>

但我没有得到一个名为&#34; Shirt&#34;在视图中(标签名为&#34;项目[0]&#34;出现)。我该如何解决?请注意,我是初学者。

编辑:控制器代码

public class ReferenceController : Controller
{
    // GET: Reference
    [Authorize]
    public ActionResult Index()
    {
        return View("Index");
    }
}

3 个答案:

答案 0 :(得分:2)

当你看到帮助者的签名时,它不会为@Html.LabelFor()工作:

public static MvcHtmlString LabelFor<TModel, TValue>(
   this HtmlHelper<TModel> html,
   Expression<Func<TModel, TValue>> expression
)

您需要一个标识属性的表达式才能显示。数组项不是可以显示的属性。

您可以将HTML更改为:

@model WebApplication1.Models.Reference

@{
   ViewBag.Title = "Index";
}

<h2>Update Your References Here</h2>
<br>
<p> Please type in the reference code of the item in the corresponding text box</p>
   <section id="reference-update">
    @using (Html.BeginForm()) { 
    <fieldset>
        <legend> Reference Items</legend>

        <div class="form-horizontal">
            @foreach(var item in Model.Item)
            {
               <div class="item">
                  <label>@item</label>
               </div>
            }
            <div class="input-lg">
                @Html.TextBoxFor(model => model.ShirtId)
            </div>
        </div>
    </fieldset>
  }

如果您只想为模型中的每个项目生成标签。

编辑:

将您的控制器代码更改为:

public class ReferenceController : Controller
{
    // GET: Reference
    [Authorize]
    public ActionResult Index()
    {
        var model = new WebApplication1.Models.Reference();
        return View("Index", model);
    }
}

答案 1 :(得分:1)

我会以不同的方式构建您的模型,以简化此方案:

public class ItemModel
{
    public int ItemId { get; set; }
    public string Description { get; set; }
    public string Label { get; set; }
}

public class ItemListViewModel
{
    public IList<ItemModel> ItemList { get; set; }
}

现在,您的视图可以对ItemListViewModel类型的对象进行操作,并迭代存储在其中的项目。

优于您当前的方法:

  1. 您可以在需要时轻松添加更多项目,即短裤(内容和类型)。
  2. 简化的视图代码。
  3. 您甚至可以为每种类型使用自定义标签。

答案 2 :(得分:0)

使用@Html.Label(Model.Item[0])

<div class="item">
                    @Html.Label(Model.Item[0])

                </div>