Как мне запрограммировать этот метод ActionResult для контроллеров с помощью этого простого представления Create для моего представления ASP.NET MVC3? - PullRequest
1 голос
/ 08 октября 2011

Я не уверен, должен ли я использовать 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; }
}

View

@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(... ??? ...)
{
  .... ????
}

1 Ответ

4 голосов
/ 08 октября 2011

Поскольку у вас строго типизированное представление, вы можете сделать так, чтобы ваш метод [HttpPost] принял тот же тип, что и переменная, например:

[HttpPost]
public ActionResult Create(Product model)  
{  
    if (ModelState.IsValid)
    {
        // add new product
        .... ????
    } 
}  

DefaultModelBinder примет возвращенные значения и вставитих в вашу строго типизированную модель.Viola!

Пока модель для вашего шаблона для вашей коллекции тегов имеет тип string, MVC будет выполнять итерацию всей коллекции, чтобы ее можно было связать (хотя вам, возможно, придется изменить с ICollection в список).

ОБНОВЛЕНИЕ

Как мы уже обсуждали в комментариях, вместо создания одного текстового поля для тега, создайте отдельную ViewModel, в которой есть все ваши другие продукты.properties.

Вместо использования List<string> Tags в вашей ViewModel создайте это свойство:

public string TagCollection { get; set; }

В вашем представлении есть текстовое поле для TagCollection.Затем в действии «Создать» вы можете проанализировать строку TagCollection в своем списке тегов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...