如何将列表添加到视图模型MVC中



我使用MVC 3和视图模型,在我的情况下,我有一个视图模型,它应该显示项目列表,还有一个用于插入一些输入的表单。

我的视图有问题,因为我无法将用于插入数据的窗体与视图模型相关联,你能告诉我我做错了什么吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using TestGuestBook.Models;
namespace TestGuestBook.ViewModel
{
    public class ListAddCommentsViewModel
    {
        public int CommentId { get; set; }
        [Required]
        public string Nominative { get; set; }
        [Email]
        public string Email { get; set; }
        [Required]
        public string Content { get; set; }
        public List<Comment> CommentItems { get; set; }
    }
}

查看

@model IEnumerable<TestGuestBook.ViewModel.ListAddCommentsViewModel>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ListAddCommentsViewModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.CommentId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CommentId)
            @Html.ValidationMessageFor(model => model.CommentId)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Nominative)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Nominative)
            @Html.ValidationMessageFor(model => model.Nominative)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Content)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Content)
            @Html.ValidationMessageFor(model => model.Content)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            CommentId
        </th>
        <th>
            Nominative
        </th>
        <th>
            Email
        </th>
        <th>
            Content
        </th>
        <th></th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CommentId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Nominative)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Content)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}
</table>

您不需要向视图传递Collection。只有ViewModel的一个对象就足够了。您的ViewModel已具有用于保存集合的属性(Comments列表)

因此,在GET操作中,只将此viewModel的一个实例返回到View

public ActionResult GetComments(int postId)
{
  var viewModel=new ListAddCommentsViewModel();
  viewModel.CommentItems =db.GetComments(postId);
  return View(viewModel);
}

现在在您的视图中,让它绑定到ListAddCommentsViewModel 的单个实例

@model TestGuestBook.ViewModel.ListAddCommentsViewModel

在您的视图中,要显示评论列表,请在ViewModel 中使用Collection type属性(Model.CommentItems

@foreach (var item in Model.CommentItems) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CommentId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Nominative)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Content)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new {  @id=item.PrimaryKey  }) |
            @Html.ActionLink("Details", "Details", new {  @id=item.PrimaryKey  }) |
            @Html.ActionLink("Delete", "Delete", new { @id=item.PrimaryKey  })
        </td>
    </tr>
}

这是最好的解决方案,我检查了几乎所有的信息,这是一个有效的解决方案!!感谢

    public  ActionResult UploadFile(UploadFileViewModel model)
    {
        if (ModelState.IsValid)
        {
            var file = model.File;
            var parsedContentDisposition =
            ContentDispositionHeaderValue.Parse(file.ContentDisposition);
            var filename = Path.Combine(_environment.WebRootPath,
                "Uploads", parsedContentDisposition.FileName.Trim('"'));
            file.SaveAsAsync(filename);
        }
        return View();
    }

相关内容

  • 没有找到相关文章

最新更新