我应该如何编程这个控制器的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(... ??? ...)
{
  .... ????
}

我应该如何编程这个控制器的ActionResult方法与这个简单的创建视图为我的ASP.NET mvc视图

既然你有一个强类型的视图,你可以让你的[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字符串解析为标记列表。