也许标题不是那么明确。让我解释一下我的情况
我的控制器中有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 METHOD中只获取它的两个属性(Id string,Changed bool)。
我没有把什么放在方法参数里面。
[HttpPost]
public ActionResult RecheckAssignment(...)
{
return View();
}
我把所有内容放在会话变量中,因为稍后我必须再次获取实体,我想这是一个使用Session的好选项,但我不确定。
那么,我应该在方法内部编写什么才能获得Id和Changed属性来更新实体。
答案 0 :(得分:1)
当ASP.NET MVC在<form>
期间将POST
映射回Action时,它将填充它可以执行的操作。考虑这样一个类:
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
}
并注意null
和0
是这些类型的默认值。所以,如果我想POST
属性Model
,我需要在表单中获取它。我可以使用@Html.TextBoxFor
执行此操作,但如果我不希望用户看到该怎么办?好吧,我也可以这样做:
Html.HiddenFor(m => m.Model);
现在,当表单为POST
时,它将使用下载的值填充Model
。因此,只需确保您需要的所有属性在某种程度上都是。