我在理解mvc 4中的viewmodel概念时遇到了一些困难。我知道要创建简单的注册表单。我也知道使用视图显示数据。我想在一个视图中执行它们但无法实现它。这就是我想要的。 这是模特。
public class Table
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
public int pincode { get; set; }
}
这是我的观看代码。
@model c3card.Website.Models.Table
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_LayoutC3Card.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Table</h4>
<hr />
@Html.ValidationSummary(true)
<div>
@Html.LabelFor(model => model.name, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.name) @Html.ValidationMessageFor(model => model.name)
</div>
<div>
@Html.LabelFor(model => model.address, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.address)
</div>
<div>
@Html.LabelFor(model => model.pincode, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.pincode)
</div>
<input type="submit" value="Create" class="btn btn-default" />
</div>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.name)
</th>
<th>
@Html.DisplayNameFor(model => model.address)
</th>
<th>
@Html.DisplayNameFor(model => model.pincode)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.name)
</td>
<td>
@Html.DisplayFor(modelItem => item.address)
</td>
<td>
@Html.DisplayFor(modelItem => item.pincode)
</td>
</tr>
}
</table>
}
我的主要怀疑在这里。上面的表格工作正常。如果我想显示项目,那么我应该放置这行代码@model IEnumerable<c3card.Website.Models.Table>
,但如果我把这个@Html.EditorFor(model => model.name)
收到错误。所以我想将数据发布到数据库,我想在同一视图中显示。我怎么能做到这一点?
只要我输入名称,地址,密码等数据,当我点击提交按钮时,我想显示下表中的所有数据。这就是我想要实现的目标。我可以通过使用viewbag
概念来实现,但我避免使用viewbag
概念。
它似乎没有错误正常工作。现在最后一件事是如何将模型返回到视图中? 请注意:GetDetails是DAL层中的方法。我已经编写了linq查询来根据参数重新启动数据。如果您有任何疑虑,请告诉我。提前谢谢。
这是我的观看代码。
@model c3card.Dal.EDModel.MyViewModel
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_LayoutC3Card.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>ts_upld_doc</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
<div class="col-md-10">
@Html.EditorFor(x => x.upload_document.upld_clientid)
</div>
</div>
<div class="form-group">
<div class="col-md-10">
@Html.EditorFor(x => x.upload_document.upld_employeeid)
</div>
</div>
<div class="form-group">
<div class="col-md-10">
@Html.EditorFor(x => x.upload_document.upld_empcitizenid)
</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>
}
现在问题是提交按钮没有启动。 这是我的观点模型。
public class MyViewModel
{
public ts_upld_doc upload_document { get; set; }
public IList<ts_upld_doc> Upload_List { get; set; }
}
表ts_upld_doc包含许多字段,如client_id,emp_id,citizen_id等,所以我不在这里发帖。
这是我的viewmodel。
public class MetaDataClass
{
public virtual int upld_docid { get; set; }
public virtual string upld_docname { get; set; }
public virtual string upld_contentlabel { get; set; }
public virtual string upld_contentvalue { get; set; }
}
public class DeleteDocApproval
{
public ts_upld_doc upload_document { get; set; }
public IList<ts_upld_doc> Upload_List { get; set; }
public IList<MetaDataClass> test { get; set; }
}
这是我使用GET的索引方法
public ActionResult Index()
{
DeleteDocApproval model = new DeleteDocApproval()
{
upload_document = new ts_upld_doc(),
Upload_List = new List<ts_upld_doc>(),
test = new List<ts_upld_doc>()
{
}
};
}
实际上要填写我的gridview,我有一些像这样的大问题。但是我无法在执行方法中写出它。
答案 0 :(得分:2)
要在同一视图上显示表单和列表,您需要为此创建ViewModel
。
所以这是你的班级。
public class Table
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
public int pincode { get; set; }
}
现在创建ViewModel,其中包含此类和此类的列表。
public class MyViewModel
{
public Table Registertable { get; set; }
public IList<Table> UserList { get; set; }
}
在视图中使用此视图模型。写下这段代码。
@model IeInTouch.Web.Models.MyViewModel
我没有为表单编写所有代码。
这只是样本。 在您的表单中
@Html.TextBoxFor(x => x.Registertable.name)
显示表格标题的日期。
@Html.DisplayFor(x => x.Registertable.name)
现在运行foreach循环来显示数据。
@foreach(var user in Model.UserList)
{
@Html.DisplayFor(modelItem => user.address)
}
现在从操作
传递此视图模型 public ActionResult Test()
{
MyViewModel myViewModel = new MyViewModel()
{
Registertable = new Table(),
UserList = new List<Table>(){
new Table(){
name="xyz",
id=1
},
new Table(){
name="ABC",
id=2
}
}
};
return View(myViewModel);
}