我应该如何编程这个控制器的ActionResult方法与这个简单的创建视图为我的ASP.NET mvc视图
本文关键字:视图 创建 简单 我的 mvc NET ASP 方法 编程 何编程 控制器 | 更新日期: 2023-09-27 18:10:55
我不确定我是否应该使用FormsCollection
或其他东西,与这个基本的Create
视图。
(注意:我使用自定义编辑器模板的标签ICollection<string>
)
public class Question
{
[Required, StringLength(100)]
public string Title { get; set; }
[Required]
public string Body { get; set; }
public ICollection<string> Tags { get; set; }
}
<<h3>视图/h3>@model AWing.Core.Entities.Product
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Question</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Tags)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Tags, "tags")
@Html.ValidationMessageFor(model => model.Tags)
</div>
<p>
<input type="submit" value="Create a new product" />
</p>
</fieldset>
}
控制器[HttpPost]
public ActionResult Create(FormsCollection formsCollection)
{
... ????
}
还是别的什么?
[HttpPost]
public ActionResult Create(... ??? ...)
{
.... ????
}
既然你有一个强类型的视图,你可以让你的[HttpPost]
方法采用与变量相同的类型,例如:
[HttpPost]
public ActionResult Create(Product model)
{
if (ModelState.IsValid)
{
// add new product
.... ????
}
}
DefaultModelBinder
将接受返回的值,并将它们插入强类型模型中。中提琴!
只要标签集合模板的模型为string
类型,MVC将遍历集合,以便它可以被绑定(尽管您可能必须从ICollection
更改为List)。
正如我们在评论中讨论的那样,与其为每个标签创建一个文本框,不如创建一个单独的ViewModel,其中包含所有其他产品属性。
在ViewModel中不使用List<string> Tags
,而是创建这个属性:
public string TagCollection { get; set; }
在您的视图中,为TagCollection
创建一个文本框。然后,在Create操作中,可以将TagCollection字符串解析为标记列表。