Я могу выполнить некоторую обработку на данных POST, прежде чем ASP.NET MVC UpdateModel произойдет?

Я хотел бы разделить нечисловые элементы от данных 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);
}

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

1
задан Domenic 19 May 2010 в 14:46
поделиться

2 ответа

Вместо использования автоматической привязки модели в параметрах метода действия вы можете принять опубликованную коллекцию 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
ответ дан 3 September 2019 в 00:27
поделиться

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

1
ответ дан 3 September 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: