显示列表 return 从控制器到视图 ASP.NET 中的 table MVC4
Display List return from a controller to a table in view ASP.NET MVC4
我的控制器 class 中有一个函数,它 return 一个数据列表,我想在我的视图页面中以 table 结构显示它。
我试过下面的代码,但它显示了一些错误
"Class does not contain definition of GetEnumerator"
控制器
public ActionResult data(Message msg,IEnumerable<sample> dept)
{
dbconnection db = new dbconnection();
sample s = new sample();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt;
List<examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
dept = datatable;
}
ViewBag.tabledata = dept;
return View(dept) ;
}
型号
public class sample
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string Location { get; set; }
public string tabledata { get; set; }
}
public class Message
{
public IEnumerable<sample> sampleList { get; set; }
public string MessageText { get; set; }
public string MessageFrom { get; set; }
}
查看
@model examplemvc1.Models.sample
@foreach (var data in Model)
{
<table><tr><td>@data.FirstName</td></tr></table>
}
更新
这就是我的整个视图
@model List<examplemvc1.Models.sample>
@{
ViewBag.Title = "Registration Form";
}
<head>
<script type="text/javascript" src="../../Scripts/jquery-1.7.1.min.js"></script>
<link href="../../Style/sample.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/samplescript.js" type="text/javascript"></script>
</head>
<h2>
Registration Form </h2>
<body>
<table>
<tr>
<th>
First Name
</th>
</tr>
@foreach (var data in Model)
{
<tr><td>@data.FirstName</td></tr>
}
</table>
@using (Html.BeginForm())
{
<table id="table1">
<tr>
<td>
@Html.Label("Enter FirstName", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.FirstName, new { @class = "class1", title = "Enter FirstName", id = "NameBox", placeholder = "Enter name", onkeydown = "return TextField(event)" })
<span class="errorMessage"></span>
@if (!ViewData.ModelState.IsValid)
{
<span class="field-validation-error">
@ViewData.ModelState["FirstName"].Errors[0].ErrorMessage</span>
}
</td>
</tr>
<tr>
<td>
@Html.Label("Enter LastName", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.LastName, new { @class = "class1", placeholder = "Enter name", id = "LastNameBox", title = "Enter Lastname", onkeydown = "return TextField(event); " })
<span class="errorMessage"></span>
</td>
</tr>
<tr>
<td>
@Html.Label("Enter Address", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.Address, new { @class = "class1", id = "AddressBox", placeholder = "Enter name", title = "Enter Address" })
<span class="errorMessage"></span>
</td>
</tr>
<tr>
<td>
@Html.Label("Enter PhoneNumber", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.PhoneNumber, new { @class = "class1", id = "PhoneBox", placeholder = "Enter name", title = "Enter Phonenumber", onkeydown = "return ValidateNumber(event);" })
<span class="errorMessage"></span>
</td>
</tr>
<tr>
<td>
@Html.Label("Enter Location", new { @class = "standard_label_style" })
</td><td>
@Html.TextBoxFor(a => a.Location, new { @class = "class1", id = "LocationBox", placeholder = "Enter name", title = "Enter Location" })
<span class="errorMessage"></span>
</td>
</tr>
</table>
<input type="button" id="btnSave" value="Register"/>
<input type="button" value="Clear"/>
<input type="button" id="Tabledata" value="Tabledata"/>
<div id="div1"></div>
@*@Html.ValidationSummary()*@
<script type="text/javascript">
function ValidateNumber(e) {
var evt = (e) ? e : window.event;
var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
};
function TextField(e) {
var evt = (e) ? e : window.event;
var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
if (charCode > 31 && (charCode < 48 || charCode > 56)) {
return true;
}
else if (charCode == 8 || charCode == 9) {
return true;
}
return false
};
</script>
}
</body>
我的视图代码中显示错误,实际上我不知道如何在视图页面中获取该值。我是 mvc 的新手。请帮我解决这个问题。任何帮助将不胜感激。
"Update"
我已经在 Whosebug 的帮助下解决了我的问题下面是我的正确代码
控制器
public ActionResult data()
{
SomeViewModel model = new SomeViewModel();
dbconnection db = new dbconnection();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
sample s = new sample();
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
model.samples.Add(s);
}
return View(model);
}
型号
namespace examplemvc1.Models
{
public class sample
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string Location { get; set; }
public string tabledata { get; set; }
}
public class Message
{
public IEnumerable<sample> sampleList { get; set; }
public string MessageText { get; set; }
public string MessageFrom { get; set; }
}
public class SomeViewModel
{
public SomeViewModel()
{
samples = new List<sample>();
sample = new sample();
}
public List<sample> samples { get; set; }
public sample sample { get; set; }
}
}
查看
@model examplemvc1.Models.SomeViewModel
//................
@foreach (var data in Model.samples)
{
<tr><td>@data.FirstName</td>
<td>@data.LastName</td>
<td>@data.Address</td>
<td>@data.PhoneNumber</td>
<td>@data.Location</td></tr>
}
</table>
看看下面 Stephen Muecke 的回答,他把上下文解释得很清楚了
问题是您的模型是 examplemvc1.Models.sample
类型,而您必须传递 List<examplemvc1.Models.sample>
的对象才能查看:
return View(datatable) ;
您的操作:
List <examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
}
return View(datatable); // passing list to view
并在视图中将模型设置为 List<examplemvc1.Models.sample>
:
@model List<examplemvc1.Models.sample>
现在重复您的操作方式:
<table>
<thead>
<tr><th>First Name</th></tr>
</thead>
<tbody>
@foreach (var data in Model)
{
<tr><td>@data.FirstName</td></tr>
}
</tbody>
</table>
问题出在你的模型指令上。
应该是
@model IEnumerable<examplemvc1.Models.sample>
而不是
@model examplemvc1.Models.sample
注意:您像dept = datatable;
一样进行了几次赋值,您可以像这样更新代码。
public ActionResult data(Message msg,IEnumerable<sample> dept)
{
dbconnection db = new dbconnection();
sample s = new sample();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt;
List <examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
//dept = datatable;
}
ViewBag.tabledata = datatable;
return View(datatable) ;
}
更新
在这种情况下,您需要先创建视图模型并将其实例作为模型传递到那里。
public class SomeViewModel
{
public SomeViewModel()
{
samples = new List<sample>();
sample = new sample();
}
public List<sample> samples {get; set;}
public sample sample {get; set;}
}
并在模型声明中
@model namespace.SomeViewModel
然后在控制器中如下所示。
public ActionResult data(Message msg,IEnumerable<sample> dept)
{
dbconnection db = new dbconnection();
sample s = new sample();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt;
List<examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
dept = datatable;
}
ViewBag.tabledata = dept;
SomeViewModel vm = new SomeViewModel();
vm.samples = datatable;
vm.sample = //somesample instance here you want to edit.
return View(vm) ;
}
在视图中,您将通过 vm.samples
获得 vm 迭代实例
@foreach (var data in Model.samples)
{
<tr><td>@data.FirstName</td></tr>
}
并在其余视图中执行如下操作:
@Html.TextBoxFor(a => a.sample.FirstName, new { @class = "class1", title =
"Enter FirstName", id = "NameBox", placeholder = "Enter name", onkeydown =
"return TextField(event)" })
您的视图显示的是 sample
的列表和似乎是新 sample
的表单。首先创建一个视图模型来表示您想要的内容 display/edit
public class SampleVM
{
public SampleVM
{
SampleCollection = new List<sample>
}
public List<sample> SampleCollection { get; set; }
public sample NewSample { get; set; }
}
在您的控制器中将代码修改为
public ActionResult data()
{
SampleVM model = new SampleVM();
dbconnection db = new dbconnection();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
sample s = new sample();
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
model.SampleCollection.Add(s);
}
return View(model);
}
备注:
- 从 GET 方法中删除参数。除了你
不要使用它们,所以它们毫无意义,即使你尝试过
将这些对象传递给方法,绑定将失败并且
collections 将为空(如果你要构建正确的
查询字符串以使其工作,它会很长,几乎
肯定会抛出异常)
- 您需要在
foreach
循环中初始化一个新的 sample
(您的代码只初始化了一个对象,并且每个循环都更新了它的
属性添加到当前行,所以你最终会得到多个
同一个对象的引用,都匹配最后一个的值
在你的 table) 行
- 无需将模型作为
ViewBag
属性(其
已经使用 return View(model);
传递给视图
并将您的视图修改为
@model SampleVM
....
<table>
@foreach(var sample in Model.SampleCollection)
<tr>
<td>@sample .FirstName</td>
</tr>
}
</table>
@Html.BeginForm())
{
@Html.LabelFor(m => m.NewSample.FirstName, "Enter FirstName", new { @class = "standard_label_style" })
@Html.TextBoxFor(m => m.NewSample.FirstName, @class = "class1", placeholder = "Enter name", title = "Enter Lastname")
@Html.ValidationMessageFor(m => m.NewSample.FirstName)
}
....
<input type="submit" id="btnSave" value="Register"/>
备注:
- 用于将元素与控件相关联的标签元素。您的
使用会生成
<label for="Enter_FirstName">
但您没有
用 id="Enter_FirstName"
控制。最好你应该有
[Display(Name = "Enter FirstName")]
在 属性 上,否则
使用强类型助手
- 使用
@Html.ValidationMessageFor()
渲染ModelState
错误,
虽然在你的情况下你所有的属性都是字符串而你没有
有任何验证属性,所以永远不会有任何错误,所以
这有点毫无意义
- html 助手生成一个
id
属性。很少需要
覆盖它。停止用行为污染你的标记并学习
使用 Unobtrusive Javascript
- 您的表单不包含提交按钮
我的控制器 class 中有一个函数,它 return 一个数据列表,我想在我的视图页面中以 table 结构显示它。 我试过下面的代码,但它显示了一些错误
"Class does not contain definition of GetEnumerator"
控制器
public ActionResult data(Message msg,IEnumerable<sample> dept)
{
dbconnection db = new dbconnection();
sample s = new sample();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt;
List<examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
dept = datatable;
}
ViewBag.tabledata = dept;
return View(dept) ;
}
型号
public class sample
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string Location { get; set; }
public string tabledata { get; set; }
}
public class Message
{
public IEnumerable<sample> sampleList { get; set; }
public string MessageText { get; set; }
public string MessageFrom { get; set; }
}
查看
@model examplemvc1.Models.sample
@foreach (var data in Model)
{
<table><tr><td>@data.FirstName</td></tr></table>
}
更新 这就是我的整个视图
@model List<examplemvc1.Models.sample>
@{
ViewBag.Title = "Registration Form";
}
<head>
<script type="text/javascript" src="../../Scripts/jquery-1.7.1.min.js"></script>
<link href="../../Style/sample.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/samplescript.js" type="text/javascript"></script>
</head>
<h2>
Registration Form </h2>
<body>
<table>
<tr>
<th>
First Name
</th>
</tr>
@foreach (var data in Model)
{
<tr><td>@data.FirstName</td></tr>
}
</table>
@using (Html.BeginForm())
{
<table id="table1">
<tr>
<td>
@Html.Label("Enter FirstName", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.FirstName, new { @class = "class1", title = "Enter FirstName", id = "NameBox", placeholder = "Enter name", onkeydown = "return TextField(event)" })
<span class="errorMessage"></span>
@if (!ViewData.ModelState.IsValid)
{
<span class="field-validation-error">
@ViewData.ModelState["FirstName"].Errors[0].ErrorMessage</span>
}
</td>
</tr>
<tr>
<td>
@Html.Label("Enter LastName", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.LastName, new { @class = "class1", placeholder = "Enter name", id = "LastNameBox", title = "Enter Lastname", onkeydown = "return TextField(event); " })
<span class="errorMessage"></span>
</td>
</tr>
<tr>
<td>
@Html.Label("Enter Address", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.Address, new { @class = "class1", id = "AddressBox", placeholder = "Enter name", title = "Enter Address" })
<span class="errorMessage"></span>
</td>
</tr>
<tr>
<td>
@Html.Label("Enter PhoneNumber", new { @class = "standard_label_style" })
</td>
<td>
@Html.TextBoxFor(a => a.PhoneNumber, new { @class = "class1", id = "PhoneBox", placeholder = "Enter name", title = "Enter Phonenumber", onkeydown = "return ValidateNumber(event);" })
<span class="errorMessage"></span>
</td>
</tr>
<tr>
<td>
@Html.Label("Enter Location", new { @class = "standard_label_style" })
</td><td>
@Html.TextBoxFor(a => a.Location, new { @class = "class1", id = "LocationBox", placeholder = "Enter name", title = "Enter Location" })
<span class="errorMessage"></span>
</td>
</tr>
</table>
<input type="button" id="btnSave" value="Register"/>
<input type="button" value="Clear"/>
<input type="button" id="Tabledata" value="Tabledata"/>
<div id="div1"></div>
@*@Html.ValidationSummary()*@
<script type="text/javascript">
function ValidateNumber(e) {
var evt = (e) ? e : window.event;
var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
};
function TextField(e) {
var evt = (e) ? e : window.event;
var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
if (charCode > 31 && (charCode < 48 || charCode > 56)) {
return true;
}
else if (charCode == 8 || charCode == 9) {
return true;
}
return false
};
</script>
}
</body>
我的视图代码中显示错误,实际上我不知道如何在视图页面中获取该值。我是 mvc 的新手。请帮我解决这个问题。任何帮助将不胜感激。
"Update"
我已经在 Whosebug 的帮助下解决了我的问题下面是我的正确代码
控制器
public ActionResult data()
{
SomeViewModel model = new SomeViewModel();
dbconnection db = new dbconnection();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
sample s = new sample();
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
model.samples.Add(s);
}
return View(model);
}
型号
namespace examplemvc1.Models
{
public class sample
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string Location { get; set; }
public string tabledata { get; set; }
}
public class Message
{
public IEnumerable<sample> sampleList { get; set; }
public string MessageText { get; set; }
public string MessageFrom { get; set; }
}
public class SomeViewModel
{
public SomeViewModel()
{
samples = new List<sample>();
sample = new sample();
}
public List<sample> samples { get; set; }
public sample sample { get; set; }
}
}
查看
@model examplemvc1.Models.SomeViewModel
//................
@foreach (var data in Model.samples)
{
<tr><td>@data.FirstName</td>
<td>@data.LastName</td>
<td>@data.Address</td>
<td>@data.PhoneNumber</td>
<td>@data.Location</td></tr>
}
</table>
看看下面 Stephen Muecke 的回答,他把上下文解释得很清楚了
问题是您的模型是 examplemvc1.Models.sample
类型,而您必须传递 List<examplemvc1.Models.sample>
的对象才能查看:
return View(datatable) ;
您的操作:
List <examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
}
return View(datatable); // passing list to view
并在视图中将模型设置为 List<examplemvc1.Models.sample>
:
@model List<examplemvc1.Models.sample>
现在重复您的操作方式:
<table>
<thead>
<tr><th>First Name</th></tr>
</thead>
<tbody>
@foreach (var data in Model)
{
<tr><td>@data.FirstName</td></tr>
}
</tbody>
</table>
问题出在你的模型指令上。
应该是
@model IEnumerable<examplemvc1.Models.sample>
而不是
@model examplemvc1.Models.sample
注意:您像dept = datatable;
一样进行了几次赋值,您可以像这样更新代码。
public ActionResult data(Message msg,IEnumerable<sample> dept)
{
dbconnection db = new dbconnection();
sample s = new sample();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt;
List <examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
//dept = datatable;
}
ViewBag.tabledata = datatable;
return View(datatable) ;
}
更新 在这种情况下,您需要先创建视图模型并将其实例作为模型传递到那里。
public class SomeViewModel
{
public SomeViewModel()
{
samples = new List<sample>();
sample = new sample();
}
public List<sample> samples {get; set;}
public sample sample {get; set;}
}
并在模型声明中
@model namespace.SomeViewModel
然后在控制器中如下所示。
public ActionResult data(Message msg,IEnumerable<sample> dept)
{
dbconnection db = new dbconnection();
sample s = new sample();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt;
List<examplemvc1.Models.sample> datatable = new List<sample>();
dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
datatable.Add(s);
dept = datatable;
}
ViewBag.tabledata = dept;
SomeViewModel vm = new SomeViewModel();
vm.samples = datatable;
vm.sample = //somesample instance here you want to edit.
return View(vm) ;
}
在视图中,您将通过 vm.samples
获得 vm 迭代实例@foreach (var data in Model.samples)
{
<tr><td>@data.FirstName</td></tr>
}
并在其余视图中执行如下操作:
@Html.TextBoxFor(a => a.sample.FirstName, new { @class = "class1", title =
"Enter FirstName", id = "NameBox", placeholder = "Enter name", onkeydown =
"return TextField(event)" })
您的视图显示的是 sample
的列表和似乎是新 sample
的表单。首先创建一个视图模型来表示您想要的内容 display/edit
public class SampleVM
{
public SampleVM
{
SampleCollection = new List<sample>
}
public List<sample> SampleCollection { get; set; }
public sample NewSample { get; set; }
}
在您的控制器中将代码修改为
public ActionResult data()
{
SampleVM model = new SampleVM();
dbconnection db = new dbconnection();
SqlConnection con = new SqlConnection(db.GetconString());
DataTable dt = db.BuildDT("select * from MVCsample");
foreach (DataRow row in dt.Rows)
{
sample s = new sample();
s.FirstName = Convert.ToString(row["First Name"]);
s.LastName = Convert.ToString(row["Last Name"]);
s.Address = Convert.ToString(row["Address"]);
s.PhoneNumber = Convert.ToString(row["PhoneNumber"]);
s.Location = Convert.ToString(row["Location"]);
model.SampleCollection.Add(s);
}
return View(model);
}
备注:
- 从 GET 方法中删除参数。除了你 不要使用它们,所以它们毫无意义,即使你尝试过 将这些对象传递给方法,绑定将失败并且 collections 将为空(如果你要构建正确的 查询字符串以使其工作,它会很长,几乎 肯定会抛出异常)
- 您需要在
foreach
循环中初始化一个新的sample
(您的代码只初始化了一个对象,并且每个循环都更新了它的 属性添加到当前行,所以你最终会得到多个 同一个对象的引用,都匹配最后一个的值 在你的 table) 行
- 无需将模型作为
ViewBag
属性(其 已经使用return View(model);
传递给视图
并将您的视图修改为
@model SampleVM
....
<table>
@foreach(var sample in Model.SampleCollection)
<tr>
<td>@sample .FirstName</td>
</tr>
}
</table>
@Html.BeginForm())
{
@Html.LabelFor(m => m.NewSample.FirstName, "Enter FirstName", new { @class = "standard_label_style" })
@Html.TextBoxFor(m => m.NewSample.FirstName, @class = "class1", placeholder = "Enter name", title = "Enter Lastname")
@Html.ValidationMessageFor(m => m.NewSample.FirstName)
}
....
<input type="submit" id="btnSave" value="Register"/>
备注:
- 用于将元素与控件相关联的标签元素。您的
使用会生成
<label for="Enter_FirstName">
但您没有 用id="Enter_FirstName"
控制。最好你应该有[Display(Name = "Enter FirstName")]
在 属性 上,否则 使用强类型助手 - 使用
@Html.ValidationMessageFor()
渲染ModelState
错误, 虽然在你的情况下你所有的属性都是字符串而你没有 有任何验证属性,所以永远不会有任何错误,所以 这有点毫无意义 - html 助手生成一个
id
属性。很少需要 覆盖它。停止用行为污染你的标记并学习 使用 Unobtrusive Javascript - 您的表单不包含提交按钮