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

Я бы хотел удалить нечисловые элементы из данных POST перед использованием UpdateModel для обновления копии в базе данных. Есть ли способ сделать это?

// TODO: it appears I don't even use the parameter given at all, and all the magic
// happens via UpdateModel and the "controller's current value provider"?
[HttpPost]
public ActionResult Index([Bind(Include="X1, X2")] Team model) // TODO: stupid magic strings
{
    if (this.ModelState.IsValid)
    {
        TeamContainer context = new TeamContainer();

        Team thisTeam = context.Teams.Single(t => t.TeamId == this.CurrentTeamId);
        // TODO HERE: apply StripWhitespace() to the data before using UpdateModel.
        // The data is currently somewhere in the "current value provider"?
        this.UpdateModel(thisTeam);
        context.SaveChanges();

        this.RedirectToAction(c => c.Index());
    }
    else
    {
        this.ModelState.AddModelError("", "Please enter two valid Xs.");
    }

    // If we got this far, something failed; redisplay the form.
    return this.View(model);
}

Извините за краткость, всю ночь работаю над этим; надеюсь, мой вопрос достаточно ясен? Также извините, так как это своего рода вопрос новичка, который я мог бы получить за несколько часов траления документации, но мне не хватает времени ... блеф.

Ответы [ 2 ]

1 голос
/ 26 мая 2010

Вместо использования автоматической привязки модели в параметрах вашего метода действия, вы можете принять опубликованную форму FormCollection и работать с ней. Вы можете (1) изменить значения в этой специальной коллекции, а затем (2) связать вашу модель вручную, используя UpdateModel / TryUpdateModel.

например,

public ActionResult Index(FormCollection formCollection)
{
    DoWhateverToFormCollection(formCollection);
    Team model;
    // TO-DO: Use TryUpdateModel here and handle more nicely
    // Should also pass in binding whitelist/blacklist to the following, if didn't remove from the formCollection already...
    UpdateModel<Team>(model, formCollection);    
    // rest of your code...

}

Надеюсь, это должно работать как рекламируется, и удачи!

1 голос
/ 19 мая 2010

Я полагаю, что вы можете использовать Пользовательскую модель Binder для этого. Скотт Хансельман имеет здесь статью , которая описывает процесс, используя в качестве примера концепцию разделения DateTime на две отдельные части.

...