C# 发布后MVC发回模型属性

C# 发布后MVC发回模型属性,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个模型,通过GET方法发送到视图,并成功绑定到TextFor和ListFor e、 g 当用户提交表单时,模型将成功地传递回POST操作方法及其属性 [HttpPost] public ActionResult POST(Model quiz) { string Q1 = quiz.Q1 // = will equal what the user has put in. good return View("Quiz", quiz);

我有一个模型,通过GET方法发送到视图,并成功绑定到
TextFor
和ListFor

e、 g

当用户提交表单时,模型将成功地传递回POST操作方法及其属性

    [HttpPost]
    public ActionResult POST(Model quiz)
    {
      string Q1 = quiz.Q1 // = will equal what the user has put in. good

      return View("Quiz", quiz);
    }
但是,当模型(测验)返回到视图时,测验模型内的属性为空,如何保留通过POST方法传递的属性

**编辑**

GET方法

    [HttpGet]
    public ActionResult Quiz()
    {
        try
        {
            Quiz quiz = new Quiz();

            // Of course, I could do this in the constructor of the model..
            InitialiseQuiz(Quiz);

            return View("Quiz", quiz");
        }
        catch (Exception ex)
        {

        }
    }

感谢

modelbinder用它拥有的任何POST数据创建了该类的实例。任何为null的内容都没有发布的数据。使其不为null的最简单方法是为该属性创建一个HTML输入,以便为其发布一些内容

但是,在处理现有数据的情况下,最好只发布需要发布的内容,然后再次查找原始对象,以便将原始属性值映射回传递到操作中的版本:

[HttpPost]
public ActionResult Quiz(int id, Quiz model)
{
    var quiz = db.Quizzes.Find(id);
    // assuming `Foo` was a property that was not posted
    model.Foo = quiz.Foo

    ...
}

如果我理解的很好,当你这么做的时候:

@Html.ListBoxFor(x => x.MultiChoice, new MultiSelectList(Model.property, "Id", "Name"))
剃须刀将创建一个
标签,其中
x.MultiChoice
值作为所选选项。但是,
Model.property
值(因为它可能是一个集合,对吧?)不会被持久化

因此,在执行POST时,只会将
x.MultiChoice
值发送回服务器,而
Model.property
集合将丢失

知道这一点后,您只需在POST操作期间再次使用集合填充此属性,如:

[HttpPost]
public ActionResult POST(Model quiz)
{
    // some code here

    quiz.property = new CollectionOfSomething();
    return View("Quiz", quiz);
}

这就是您想要的吗?

我看到了“当用户提交表单时,模型成功地传递回操作后方法及其属性”和“但是,当模型(测验)返回到视图时,测验模型内的属性为空”之间的矛盾,您的GET方法看起来如何?你的观点呢?测验的观点是针对模型键入的?抱歉@TomasVoracek-会澄清的。查看->控制器-模型值正常。Controller->view(在post之后)-emptyAnother:在Get中,您创建了一个测验对象,但是post方法的输入参数是Model。还想知道你认为的模型是什么?这就是我目前正在做的-这是正确的方法吗?我很高兴。问题是,当我需要再次绑定集合时,我需要使用EF,这意味着要访问数据库,或者使用local,这很慢,但我解决了这个问题。谢谢
[HttpPost]
public ActionResult POST(Model quiz)
{
    // some code here

    quiz.property = new CollectionOfSomething();
    return View("Quiz", quiz);
}