2016-11-13 27 views
0

我:词典<TEntity,string>和asp.net mvc怎么样?

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。我创建控制器和创建行动:

[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); 
} 

我需要的foreach任何命名类型指定的所有NomenclatureAttrributes并为所有人创造价值编辑和所有添加到Model.Attributes。

@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 Framework)的

回答

1

首先创建视图模型。

public class CreateNomenclatureViewModel 
    { 
//Add other properties if needed 
    public NomenclatureType SelectedNomenclatureType { get; set; } 
    public List<NomenclatureAttribute> Attributes { get; set;} 
    } 

[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); 
} 

比,如果你想使用命名为视图模型,你可以创建GET方法新命名不是传递给查看Razor视图解决您的视图

@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> 
} 

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