MVC Core.Шаблоны могут использоваться только с доступом к полю, доступом к свойству, индексом одномерного массива или выражениями настраиваемого индексатора с одним параметром - PullRequest
0 голосов
/ 28 ноября 2018

Я передаю на мой взгляд эту модель

public class BlogViewModel
{
    public List<CommentModel> commentModels { get; set; }
    public BlogPostLayoutModel blogPostLayoutModel { get; set; }
    public CommentModel commentModel { get; set; }
    public int pageNumber { get; set; }
}

Класс CommentModel

 public class CommentModel
{
    public int IDComment { get; set; }
    public int IDPost { get; set; }

    [Required()]
    public string Username { get; set; }
    [Required()]
    public string Content { get; set; }

    public static CommentModel CommentToCommentModel(Comment comment)
    {
        CommentModel commentModel = new CommentModel();
        commentModel.IDComment = comment.IDComment;
        commentModel.IDPost = comment.IDPost;
        commentModel.Username = comment.Username;
        commentModel.Content = comment.Content;
        return commentModel;
    }

    public static List<CommentModel> CommentsToCommentModels(List<Comment> comments)
    {
        List<CommentModel> commentModels = new List<CommentModel>();
        foreach (var comment in comments)
        {
            CommentModel commentModel = new CommentModel();
            commentModel.IDComment = comment.IDComment;
            commentModel.IDPost = comment.IDPost;
            commentModel.Username = comment.Username;
            commentModel.Content = comment.Content;
            commentModels.Add(commentModel);
        }
        return commentModels;
    }
}

И мой взгляд, где выдается ошибка (пятая строка)

<form asp-action="AddComment">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        @{ var pageNumber = Model.pageNumber;
        @Html.HiddenFor(x => pageNumber)
            int IDPost = Model.blogPostLayoutModel.IDPost;
        @Html.HiddenFor(x => x.commentModel.IDPost == IDPost)
        }

        <div class="row">
            <div class="form-group col-md-4">
                <label asp-for="commentModel.Username" class="control-label"></label>
                <input asp-for="commentModel.Username" class="form-control" />
                <span asp-validation-for="commentModel.Username" class="text-danger"></span>
            </div>
        </div>
        <div class="row">
            <div class="form-group col-md-12">
                <label class="control-label">Comment</label>
                <textarea asp-for="commentModel.Content" class="form-control"></textarea>
                <span asp-validation-for="commentModel.Content" class="text-danger"></span>
            </div>
            <div class="form-group col-md-4">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </form>

Я искал ошибку, но похоже, что в основном это люди, пытающиеся вернуть значение из метода и получающие указание передать значение локальной переменной, а затем поместить эту локальную переменную в помощник тега, но это неЗдесь, похоже, дело обстоит именно так.

А также blogPostLayoutModel.IDPost определяется как

 public int IDPost { get; set; }

РЕДАКТИРОВАТЬ: Мой commentModel был нулевым, так что это была проблема.

Рабочая форма

<form asp-action="AddComment">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        @{
        @Html.HiddenFor(x => Model.pageNumber)
            Model.commentModel.IDPost = Model.blogPostLayoutModel.IDPost;
        @Html.HiddenFor(x => x.commentModel.IDPost)
        }
        <div class="row">
            <div class="form-group col-md-4">
                <label asp-for="commentModel.Username" class="control-label"></label>
                <input asp-for="commentModel.Username" class="form-control" />
                <span asp-validation-for="commentModel.Username" class="text-danger"></span>
            </div>
        </div>
        <div class="row">
            <div class="form-group col-md-12">
                <label class="control-label">Comment</label>
                <textarea asp-for="commentModel.Content" class="form-control"></textarea>
                <span asp-validation-for="commentModel.Content" class="text-danger"></span>
            </div>
            <div class="form-group col-md-4">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </form>
...