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

时间:2017-12-19 13:47:37

标签: asp.net asp.net-mvc

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

<input type="submit" 
       value="Remove Question" 
       class="btn btn-outline-danger" 
       formaction=@Url.Action("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方法 使用对象调用,使用默认构造函数构建,因此他的字段为空。

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

1 个答案:

答案 0 :(得分:2)

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

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

    <input type = "submit"
    value="Remove Question" 
    class="btn btn-outline-danger" 
    formaction=@Url.Action("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执行此类型的正确方法。