代码之家  ›  专栏  ›  技术社区  ›  Domenic

我可以在ASP.NET MVC UpdateModel发生之前对POST数据执行一些处理吗?

  •  1
  • Domenic  · 技术社区  · 14 年前

    在使用之前,我想从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 回复  |  直到 14 年前
        1
  •  1
  •   Funka    14 年前

    您可以接受发布的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...
    
    }
    

    希望这应该工作的广告,祝你好运!

        2
  •  1
  •   Robert Harvey    14 年前

    自定义模型活页夹 为了这个。汉塞尔曼 has an article here 以将DateTime拆分为两个独立部分的概念为例,描述了这个过程。

    推荐文章