对不起,如果这是一个显而易见的问题,但到目前为止我没有太多运气。我在视图中输入了提交类型:
<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。
我相信有一些显而易见的东西我不知道了。提前谢谢了。
不,问题与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
执行它的正确方法。