首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dictionary<TEntity,string>和asp.net mvc怎么做?

Dictionary<TEntity,string>和asp.net mvc怎么做?
EN

Stack Overflow用户
提问于 2016-11-13 12:15:14
回答 1查看 136关注 0票数 0

我有:

代码语言:javascript
复制
public class Nomenclature
{
    public virtual int NomenclatureId { get; set; }
    public virtual NomenclatureType NomenclatureType { get; set; }  
    public virtual IDictionary<NomenclatureAttribute, string> Attributes { get; set; }
}
public class NomenclatureType
{
    public virtual int NomenclatureTypeId { get; set; }
    public virtual string  Name { get; set; }
    public virtual ICollection<Nomenclature> Nomenclatures { get; set; }
    public virtual ICollection<NomenclatureAttribute> NomenclatureAttributes { get; set; }
    public NomenclatureType()
    {
        Nomenclatures = new HashSet<Nomenclature>();
        NomenclatureAttributes = new HashSet<NomenclatureAttribute>();
    }
}
public class NomenclatureAttribute
{
    public virtual int NomenclatureAttributeId { get; set; }
    public virtual string AttributeName { get; set; }
    public virtual string AttributeType { get; set; }
    public virtual NomenclatureType NomenclatureType { get; set; }
}

在我的申请中,这都代表了商品的命名。我是尝试在我的应用程序中创建新的命名。我用NHibernate。我创建控制器并创建操作:

代码语言:javascript
复制
[HttpGet]
public ActionResult Create(string nomenclatureType)
{
    if (nomenclatureType == null)
        return RedirectToAction("List", "Nomenclature");
    ViewData["NomenclatureAttributes"] =
        _repositoryNomenclatureType.Get(w => w.Name == nomenclatureType).NomenclatureAttributes.ToList();
    return View();
} 

[HttpPost]
public IActionResult Create(Nomenclature nomenclature)
{
    try
    {
        if (ModelState.IsValid)
        {
            _repositoryNomenclature.Create(nomenclature);
            return RedirectToAction("List", "Nomenclature");
        }
    }
    catch (Exception)
    {
        ModelState.AddModelError("", "Unable to save changes. " +
                                         "Try again, and if the problem persists see your system administrator.");
    }
    return View(nomenclature);
}

我需要预先为任何命名类型指定所有NomenclatureAttrributes,并为所有值创建编辑器,并将所有编辑器添加到Model.Attributes中。

代码语言:javascript
复制
@model Nomenclature
@{
ViewBag.Title = "New nomenclature";
Layout = "_Layout";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    @Html.ValidationSummary(true)

    @foreach (var a in (List<NomenclatureAttribute>)ViewData["NomenclatureAttributes"])
    {
        <div class="form-group">
            <label class="control-label col-md-2">@a.AttributeName</label>
            <div class="col-md-10">
             **What i should place to this???**
            </div>
         </div>

    }

  <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

我使用Asp.net核心web应用程序(.NET框架)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-13 15:50:03

首先创建ViewModel。

代码语言:javascript
复制
    public class CreateNomenclatureViewModel
    {
//Add other properties if needed
     public NomenclatureType SelectedNomenclatureType { get; set; } 
     public  List<NomenclatureAttribute> Attributes { get; set;}
    }

第二

代码语言:javascript
复制
[HttpGet]
    public ActionResult Create(string nomenclatureType)
    {
        if (nomenclatureType == null)
            return RedirectToAction("List", "Nomenclature");
        var viewModel= new CreateMomenClatureViewModel
{
Attributes = _repositoryNomenclatureType.Get(w => w.Name == nomenclatureType).NomenclatureAttributes.ToList()
}

    return View(viewModel);
}

而不是修正你的观点

代码语言:javascript
复制
@model CreateNomenclatureViewModel
@{
ViewBag.Title = "New nomenclature";
Layout = "_Layout";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    @Html.ValidationSummary(true)

     @if (Model != null && Model.Attributes != null)
            {
                for (int i = 0; i < Model.Attributes.Count; i++)
                {

                <div class="form-group">
            @Html.DisplayFor(modelItem => Model.Attributes [i].AttributeName) 
            @Html.TextBoxFor(modelItem => Model.Attributes [i].AttributeType ) 
         </div> 

    }

  <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

如果您想使用命名为ViewModel,您可以创建新的命名上的Get方法,而不是传递到视图在剃须刀视图。

代码语言:javascript
复制
<div class="form-group">
                @Html.DisplayFor(modelItem => Model.Attributes.Keys.ElementAt(i).AttributeName) 
                @Html.TextBoxFor(modelItem => Model.Attributes.Keys.ElementAt(i).AttributeType ) 
             </div> 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40573704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档