我正在使用MVC 4,通常Visual Studio会为您创建所有视图。我有一个只有一个字段的表单,我想将创建表单嵌入到索引视图中。
因此,索引视图具有类似@model IEnumerable<Models.LinkModel>
所以我通过迭代模型集合来访问它。
但如果我尝试为创建操作嵌入表单,我需要@model Models.LinkModel
它也可以通过Model.Name访问。有没有办法做到这一点或使用不同的变量名?
好的,这是一些额外的信息。
所以我有一个模特。
public class LinkModel
{
public string LinkUrl {get;set;}
}
我有一个具有Create和Index ActionResults的控制器。
现在在索引视图中我有
@model IEnumerable<Models.LinkModel>
@{
ViewBag.Title = "Links";
}
我可以用我所有的奇特逻辑列出所有链接。
@foreach(link in Model)
{
<p>link.LinkUrl<p>
}
创建视图有此
@model Models.LinkModel // Note that it is just one item not IEnumerable
@{
ViewBag.Title = "Add Link";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset class="editor-fieldset">
<legend>LinkModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.LinkUrl)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.LinkUrl)
</div>
<p>
<input type="submit" value="Add Link" />
</p>
</fieldset>
}
现在,只为一个字段创建一个创建表单似乎非常愚蠢。我想把这个表单放在索引页面上。问题是我使用变量Model访问对象。我想知道是否有一种方法可以有两个单独的实例,或者是否能够访问具有不同名称的Model对象。
答案 0 :(得分:4)
拥有一个包含项目列表和创建
的单个项目的复合模型public class IndexModel {
public LinkModel CreateModel {get; set;}
public IEnumerable<LinkModel> Items {get; set;}
}
@model IndexModel
@using(Html.BeginForm("create")) {
@Html.EditorFor(m => m.CreateModel.Name);
}
@foreach(var item in Model.Items) {
@item.Name
}