Как передать обнуляемые свойства из представления ASP.NET в контроллер? - PullRequest
1 голос
/ 01 июля 2010

Я уже несколько лет читаю stackoverflow, но это первый раз, когда мне действительно нужно опубликовать вопрос, поскольку я не могу найти подходящий ответ где-либо.

Дело в том,Я хочу передать объект (точнее, сущность LinqToSQL) в мой View, разрешить пользователю добавить некоторые свойства, а затем опубликовать его обратно, чтобы сохранить.

Мой объект, называемый Probation, имеетнесколько свойств (id, forpost, forcomment, пользователь, запуск, часы) и некоторые ссылки на связанные сущности.Субъекты forpost и forcomment допускают обнуление, поскольку пользователь может быть подвергнут испытанию за создание оскорбительного сообщения или оскорбительного комментария.Пожалуйста, учтите, что forpost относится к сущности Idea, я не знаю, о чем я думал, называя это постом.

Итак, вот моя логика контроллера:

        [Authorize(Roles = "Admin, Moderator")]
    public ActionResult ProbateUser(int? post, int? comment)
    {
        if (post != null)
        {
            Idea idea = irep.GetIdea(post ?? 0);
            Probation probation = new Probation
            {
                user = (Guid)idea.user,
                Idea = idea
            };
            return View(probation);
        }
        if (comment != null)
        {
            Comment rcomment = crep.GetComment(comment ?? 0);
            Probation probation = new Probation
            {
                user = rcomment.user,
                Comment = rcomment
            };
            return View(probation);
        }

        return View("NotFound");
    }

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize]
    public ActionResult ProbateUser(Probation probation, FormCollection values)
    {           
        try
        {
            probation.starting = DateTime.Now;
            rep.ProbateUser(probation);
            rep.Save();
            return RedirectToAction("Index");
        }
        catch
        {
            return View("NotFound");
        }
    }

}

А вот мнение,используя скрытые поля для хранения предустановленных значений:

        <fieldset>
        <legend>Fields</legend>
            <%: Html.Hidden("Idea", Model.Idea)%>
            <%: Html.Hidden("Comment", Model.Comment)%>
            <%: Html.Hidden("user", Model.user) %>
        <div class="editor-label">
            <%: Html.LabelFor(model => model.reason) %>
        </div>
        <div class="editor-field">
            <%: Html.TextAreaFor(model => model.reason) %>
            <%: Html.ValidationMessageFor(model => model.reason) %>
        </div>


        <div class="editor-label">
            <%: Html.LabelFor(model => model.hours) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.hours) %>
            <%: Html.ValidationMessageFor(model => model.hours) %>
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

Теперь моя проблема заключается в том, что после отправки объекта Probation пустые поля forcomment и forpost всегда будут нулевыми!

Итак, подведем итог: как правильно передать объекты с обнуляемыми свойствами из Controller-> View-> Controller?Довольно пожалуйста?

Ответы [ 2 ]

0 голосов
/ 03 июля 2010

Хорошо, из того, что я собрал из комментариев здесь и на других форумах: просто невозможно передать пустые поля и отправить их обратно.Мой обходной путь для этого заключался в создании частичного класса Probation, который добавляет два необнуляемых поля значения к сущности Probation и использовал их для заполнения полей после обратной передачи.Как (лучшая) альтернатива, создание ViewModels также будет работать.

0 голосов
/ 01 июля 2010

Это из-за безгражданства MVC.Если вы хотите, чтобы эти поля сохранили свои значения, вам нужно поместить их в скрытые поля, чтобы они связывались во время публикации, например:

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