1

也许标题不是那么明确。让我解释一下我的情况

我的控制器中有一个 get 和 post 方法。在 GET 方法中,从数据库上下文中获取实体

    [HttpGet]
    public ActionResult RecheckAssignment(short id)
    {
        var assignment = db.Assignments.Find(id);
        Session["QuestionList"] = QuestionRepositoryManager.GetAllPossibleQuestionsFromJson(assignment.Content);  // it's a list!

        return View(Session["QuestionList"]);
    }

分配实体包含 10 个属性。当我在模型中显示此实体时,它显示使用了所有属性,但是当用户发布时,在 POST 方法中应该只从中获取两个属性(Id 字符串,Changed bool)。

我没有在方法参数里面放什么。

    [HttpPost]
    public ActionResult RecheckAssignment(...)
    {
        return View();
    }

我将所有内容都放在会话变量中,因为稍后我必须再次获取实体,我想这是使用 Session 的一个不错的选择,但我不确定。

那么,我应该在方法内部写什么来仅获取 Id 和 Changed 属性来更新实体。

4

1 回答 1

1

当 ASP.NET MVC<form>在 a 期间将 a 映射回 Action 时POST,它将填写它可以填写的内容。考虑这样一个类:

public class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}

现在考虑这种形式:

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post))
{
    Html.TextBoxFor(m => m.Make)
}

现在考虑这个动作:

public ActionResult ActionName(Car model)
{
    // the values of Car will look like this
    model.Make   // this will be what was in the text box
    model.Model  // this will be null
    model.Year   // this will be 0
}

并注意null0是这些类型的默认值。因此,如果我想要POST该属性Model,我需要以表格形式获取它。我可以用 来做到这一点@Html.TextBoxFor,但如果我不希望用户看到它怎么办?好吧,我也可以这样做:

Html.HiddenFor(m => m.Model);

所以现在当表单被POST编辑时,它将Model用它下载的值填充。因此,只需确保您需要的所有属性都以某种方式出现在表单中。

于 2013-04-12T03:09:30.087 回答