首页 文章

CS1061:'IEnumerable<>'不包含'' and no extension method ' ' accepting a first argument of type ' IEnumerable <>'的定义

提问于
浏览
1

我是.net MVC的新手 . 请帮我解决我的问题 .

我收到此错误:CS1061:'IEnumerable'不包含'Name'的定义,并且没有扩展方法'Name'可以找到接受'IEnumerable'类型的第一个参数 .

这是我的控制器public ActionResult Create(){return Index(); }

[HttpPost]
    public ActionResult Create(Person model)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost:23793");

        client.PostAsJsonAsync<Person>("api/person", model)
            .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());

        return RedirectToAction("Index");
    }

在这里我的观点

@model IEnumerable<PersonDemoMVC.Models.Person>

        @{
            ViewBag.Title = "Create";
        }

        <h2>Create</h2>


        @using (Html.BeginForm()) 
        {
            @Html.AntiForgeryToken()

            <div class="form-horizontal">
                <h4>Person</h4>
                <hr />
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                <div class="form-group">
                    @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.Age, htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.Age, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Age, "", new { @class = "text-danger" })
                    </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>
        }

        <div>
            @Html.ActionLink("Back to List", "Index")
        </div>

        <script src="~/Scripts/jquery-1.10.2.min.js"></script>
        <script src="~/Scripts/jquery.validate.min.js"></script>
        <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

3 回答

  • 0

    您的创建视图强类型为 Person entity( IEnumerable<Person> )的集合,并且在您的视图中,您正在执行类似 Model.Name (在Html帮助方法中的model => model.Name)的代码 . 这里Model是一个 IEnumerable<Person> ,IEnumerable没有 Name 属性!

    在创建视图中使用单个Person实例作为模型,而不是使用集合 .

    @model PersonDemoMVC.Models.Person
    <h2>Create</h2>
    @using(Html.BeginForm())
    {
       @Html.TextBoxFor(s=>s.Name)
       <!-- Your existing form elements -->
       <input type="submit" />
    }
    
  • 5

    您将模型定义为IEnumerable . 稍后您尝试在模型行上调用属性Name:@ Html.LabelFor(model => model.Name,htmlAttributes:new {@class =“control-label col-md-2”})

    你应该:

    • 将模型更改为:PersonDemoMVC.Models.Person

    要么

    • 循环遍历模型以接收单个Person对象实例 .
  • 0

    由于您使用的模型是可枚举的,因此请使用foreach或for循环

    @model IEnumerable<PersonDemoMVC.Models.Person>
    
            @{
                ViewBag.Title = "Create";
            }
    
            <h2>Create</h2>
    
    
            @using (Html.BeginForm()) 
            {
                @Html.AntiForgeryToken()
    
                <div class="form-horizontal">
                    <h4>Person</h4>
                    <hr />
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
         @foreach(var item in model)
           {
                    <div class="form-group">
                        @Html.LabelFor(i => item.Name, htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.EditorFor(i => item.Name, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(i => item.Name, "", new { @class = "text-danger" })
                        </div>
                    </div>
    
                    <div class="form-group">
                        @Html.LabelFor(i => item.Age, htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.EditorFor(i => item.Age, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(i => item.Age, "", new { @class = "text-danger" })
                        </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>
           }
            }
    
            <div>
                @Html.ActionLink("Back to List", "Index")
            </div>
    
            <script src="~/Scripts/jquery-1.10.2.min.js"></script>
            <script src="~/Scripts/jquery.validate.min.js"></script>
            <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
    

相关问题