我正在创建一个简单的调查系统,目前正在生成这样的 HTML。如果解决方案需要,这当然可以更改。
<form id="surveyForm">
<input type="hidden" value="1" name="surveyId" />
<div class="questionContainer">
<h4>What is 2 + 2?</h4>
<div class="optionsContainer">
<div class="optionContainer">
<input id="option_1" value="1" type="radio" name="question_1" />
<label for="option_1">3</label>
</div>
<div class="optionContainer">
<input id="option_2" value="2" type="radio" name="question_1" />
<label for="option_2">4</label>
</div>
<div class="optionContainer">
<input id="option_3" value="3" type="radio" name="question_1" />
<label for="option_3">5</label>
</div>
</div>
<div class="freeTextContainer">
<h4>Comments:</h4>
<textarea id="freetext_1" name="freetext_1"></textarea>
</div>
</div>
<!-- Multiple questionContainer may follow -->
</form>
如您所见,我最终得到了一些 POST 变量,即question_1
,question_2
等等freetext_1
,freetext_2
and 等等。单选按钮的值对应于后端数据库中的选项 ID。
现在我想使用 jQuery 或类似的方法将使用 Ajax 的响应发布到 MVC API 控制器。
所以问题1;如何使用 jQuery 将这些值序列化为可以解码服务器端的 JSON 字符串,以及如何指定接受此 json 字符串的 MVC 方法服务器端?
问题2:上面建议的解决方案不是很优雅,我想将其序列化为可以转换为可用作MVC API方法中的输入参数的POCO对象结构,例如:
public class SurveyAnswer
{
public int SurveyId { get; set; } // From a hidden field
public List<QuestionAnswer> Answers{ get; set; }
}
public class QuestionAnswer
{
public int QuestionId { get; set;}
public int OptionSelecion { get; set; }
public string FreeText { get; set; }
}
然后是这样的 MVC 方法:
[HttpPost]
public ActionResult PostAnswer(SurveyAnswer answer)
{
...
}
我将如何序列化表单以实现上述目标?