很抱歉,如果这是一个显而易见的问题,但到目前为止我还没有多少运气。 我在视图中输入了提交类型:
<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方法 使用对象调用,使用默认构造函数构建,因此他的字段为空。
我相信有一些显而易见的东西我不知道了。非常感谢提前。
答案 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
执行此类型的正确方法。