IEnumerable <> не содержит определения для '' и метода расширения '', принимающего первый аргумент типа 'IEnumerable <> - PullRequest
0 голосов
/ 07 марта 2019

Полная ошибка

'IEnumerable ' не содержит определения для «InvoiceDate», и никакой метод расширения «InvoiceDate», принимающий первый аргумент типа «IEnumerable », не может бытьнайдено (вам не хватает директивы using или ссылки на сборку?)

В настоящее время я пытаюсь выяснить, почему я получаю эту ошибку.Моя модель указана как IEnumerable, и я зацикливаю свой список.Буду признателен за любую помощь.

Окончательный результат после исправления должен состоять в том, что я могу загрузить файл, и он будет искать 2-й элемент в массиве для даты выставления счета, который не поддерживается в формате.Затем он выведет сообщение validationMessage рядом со счетом #.

Вид

@using UploadData.Models
@model IEnumerable<UploadFileData>
<html>
<body>
@using (@Html.BeginForm("Index", "ValidateUpload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="validateFile" /><br />
    <input type="submit" value="Upload" name="Submit" />
}
@if (Model.Count() > 0)
{
    <hr />
    <table id="counttable">
        <tr>
            <th rowspan="1">Invoice #</th>
            <th rowspan="1">Error</th>
        </tr>
        @foreach (UploadFileData ValidationOutput in Model)
            {
            <tr>
                <td>@ValidationOutput.Invoice</td>
                <td>@Html.ValidationMessageFor(m => m.InvoiceDate, "", new { @class = "text-danger" })</td>
            </tr>
        }
    </table>
}
</body>
</html>

Модель

using System;
using System.Globalization;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;

namespace UploadData.Models
{
public class UploadFileData : IValidatableObject
{
    [Required]
    public string Invoice { get; set; }
    [Required]
    public string InvoiceDate { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        DateTime date;
        var property = new[] { "InvoiceDate" };
        string[] formats = {"MM/d/yyyy", "M/dd/yyyy"};
        if (!DateTime.TryParseExact(InvoiceDate, formats, null, DateTimeStyles.None, out date))
        {
            yield return new ValidationResult("Invalid date format. Dates should be M/d/yyyy OR MM/d/yyyy", property);
        }
    }
}
}

Контроллер

using System;
using System.IO;
using System.Web;
using System.Web.Mvc;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
using UploadData.Models;

namespace WebApplication2.Controllers
{

public class ValidateUploadController : Controller
{
    // GET: ValidateUpload
    public ActionResult Index()
    {
        return View(new List<UploadFileData>());
    }
    [HttpPost]
    public ActionResult Index(HttpPostedFileBase validateFile)
    {
        List<UploadFileData> ValidateOutput = new List<UploadFileData>();
        if (validateFile != null)
        {
            string idate = string.Empty;
            string invoice = string.Empty;
            int namecount = 1;
            string dir = Server.MapPath("~/sourcefiles/");
            string strbuild = string.Empty;
            string fileName = Path.GetFileName(validateFile.FileName);
            string fileNameOnly = Path.GetFileNameWithoutExtension(validateFile.FileName);
            string newFullPath = Path.Combine(Server.MapPath("~/textfiles"), fileName);

            while (System.IO.File.Exists(newFullPath))
            {
                string tempFileName = string.Format("{0}({1})", fileNameOnly, namecount++);
                newFullPath = Path.Combine(Server.MapPath("~/textfiles"), tempFileName + Path.GetExtension(fileName));
            }
            validateFile.SaveAs(newFullPath);
            using (StreamReader sr = new StreamReader(newFullPath))
            {
                while ((strbuild = sr.ReadLine()) != null)
                {
                    string[] strArray = strbuild.Split('|');

                    if (strArray[0] == "1")
                    {
                        invoice = strArray[1];
                        idate = strArray[2];

                        ValidateOutput.Add(new UploadFileData
                        {
                            Invoice = invoice,
                            InvoiceDate = idate,
                        });
                    }
                }
            }
        }
        return View(ValidateOutput);
    }
}
}

1 Ответ

0 голосов
/ 08 марта 2019

Я думаю, что понял. Здесь:

@Html.ValidationMessageFor(m => m.InvoiceDate, "", new { @class = "text-danger" })

, как предложил Мохсин Мехмуд, m имеет значение IEnumerable<UpdloadFileData>, которое не имеет свойства InvoiceDate. Вы пытаетесь получить свойство одного элемента, но ссылаетесь на его «контейнер» (IEnumerable). Что вам нужно сделать, это

@Html.ValidationMessageFor(m => m.Where(x => x.InvoiceDate == ValidationOutput.InvoiceDate), "", new { @class = "text-danger" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...