我怎么能将非默认构造函数对象传递给Controller?

问题描述 投票:1回答:1

对不起,如果这是一个显而易见的问题,但到目前为止我没有太多运气。我在视图中输入了提交类型:

<input type="submit" 
       value="Remove Question" 
       class="btn btn-outline-danger" 
       [email protected]("Survey_RemoveQuestion", 
                              new Survey_Question_Wrapper() { 
                                  Survey = Model, 
                                  Question = Model.Questions[i] })/>

在我的控制器中,我有一个处理程序,如下所示:

  public ActionResult Survey_RemoveQuestion(Survey_Question_Wrapper s)
  {
      s.Survey.Questions.Remove(s.Question);
      return View("SurveyEdit", s.Survey);
  }

Survey_Question_Wrapper有2个构造函数:一个默认的空构造函数和一个构造函数,它接受2个参数并将它们分配给字段。

我遇到的问题是,Survey_RemoveQuestion方法是使用一个对象调用的,使用默认构造函数进行构建,因此他的字段为null。

我相信有一些显而易见的东西我不知道了。提前谢谢了。

asp.net asp.net-mvc
1个回答
2
投票

不,问题与Survey_Question_Wrapper构造函数无关。您正试图通过GET将复杂类型传递给控制器​​。您不能直接发送复杂类型。

您应该序列化它并将其作为字符串发送。 (我用过Json.Net,你可以用另一个库)

    <input type = "submit"
    value="Remove Question" 
    class="btn btn-outline-danger" 
    [email protected]("Survey_RemoveQuestion", 
    new
    {
        s = JsonConvert.SerializeObject(new Survey_Question_Wrapper
            {
                Survey = Model,
                Question = Model.Questions[i]
            }
        )
    })/>

和控制器部分看起来像;

  public ActionResult Survey_RemoveQuestion(string s)
  {
      //Deserialize it
      var obj = JsonConvert.DeserializeObject<Survey_Question_Wrapper>(s);
      obj.Survey.Questions.Remove(obj.Question);
      return View("SurveyEdit", obj.Survey);
  }

此外,如果要将复杂类型发送到服务器,则使用POST而不是GET执行它的正确方法。

© www.soinside.com 2019 - 2024. All rights reserved.