我是.net MVC的新手,请帮我解决问题。
我收到以下错误:CS1061:"IEnumerable"不包含"Name"的定义,并且找不到接受"IEnumarable"类型的第一个参数的扩展方法"Name"。
这是我的控制器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>
您的Create视图是强类型的Person
实体(IEnumerable<Person>
)的集合,并且在视图中执行类似Model.Name
的代码(Html helper方法中的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" />
}
由于您使用的模型是可枚举的,因此选择foreach或循环
@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>
您将模型定义为IEnumerable<PersonDemoMVC.Models.Person>
。稍后尝试调用模型上的属性Name线路:@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
您应该:
- 将模型更改为类似的内容:PersonDemoMVC.Models.Person
或
- 在模型中循环以接收单个Person对象实例
使用以下中的第一种方法
@Html.LabelFor(model=>model.First().Name,htmlAttributes:new{@class="control label col-md-2"})