我试图将我的ViewModel传递给我的Json方法做这样的事情:
在我看来:
<input type="button" id="suggestionBtn" title="Suggestion" onclick ="location.href='@Url.Action("GetNextAppointment", "Home", new { svm = Model })'" />
在我的控制器中:
public JsonResult GetNextAppointment(SuggestionViewModel svm)
{
return Json(svm, JsonRequestBehavior.AllowGet);
//this is just for testing
}
调试时,我发现我的 svm 为空。我试图用字符串参数替换它,并在我的视图中对值进行硬编码,这很有效。所以,我不太清楚问题出在哪里。
任何想法的人?
编辑:编辑代码以使用jQuery AJAX
我的观点现在是这样的:
@model AstellasSchedulerV2.Models.SuggestionViewModel
<div class="rightPanel">
@using (Html.BeginForm("NewAppointment", "Home", FormMethod.Post, new { @id = "form_ValidateAppointment" }))
{
@Html.Hidden("stringParam","")
<fieldset>
<div>
Patch Anti-douleur Corps @Html.CheckBoxFor(s => s.PADC, new { @class = "checkbox", @id = "chbxPADC" })
</div>
<br />
<div>
Patch Anti-douleur Pied @Html.CheckBoxFor(s => s.PADP, new { @class = "checkbox", @id = "chbxPADP" })
</div>
<br />
<a href="#" id="ClickMe">Click me</a>
</fieldset>
}
</div>
<script type ="text/javascript">
$(document).ready(function () {
$("#ClickMe").click(function () {
var o = new Object();
o.PADC = $("#chbxPADC").val();
o.PADP = $("#chbxPADP").val();
jQuery.ajax({
type: "POST",
url: "@Url.Action("GetJson")",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(o),
success: function (data) { alert(data.PADC); },
failure: function (errMsg) { alert(errMsg); }
});
});
</script>
答案 0 :(得分:4)
这是解决方案,让我们说你有这样的viewmodel -
public class SuggestionViewModel
{
public bool PADC { get; set; }
public bool PADP { get; set; }
}
然后您可以通过以下方式查看视图。在这里,我使用JQuery向GetJson Controller Action发出POST请求。我构造了一个JavaScript对象,然后将其序列化为Json。然后最后将Json字符串传递给Controller Action。
<fieldset>
<div>
Patch Anti-douleur Corps @Html.CheckBoxFor(s => s.PADC, new { @class = "checkbox", @id = "chbxPADC" })
</div>
<br />
<div>
Patch Anti-douleur Pied @Html.CheckBoxFor(s => s.PADP, new { @class = "checkbox", @id = "chbxPADP" })
</div>
<br />
</fieldset>
这是JQuery的一部分 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(document).ready(function () {
$("#ClickMe").click(function () {
var chk = $('#chbxPADC').is(':checked');
var chk1 = $('#chbxPADP').is(':checked');
var o = new Object();
o.PADP = chk1;
o.PADC = chk;
jQuery.ajax({
type: "POST",
url: "@Url.Action("GetJson")",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(o),
success: function (data) { alert(data.PADP); },
failure: function (errMsg) { alert(errMsg); }
});
});
});
</script>
<a href="#" id="ClickMe">Click me</a>
当您点击该按钮时,它会点击以下控制器 -
public JsonResult GetJson(SuggestionViewModel svm)
{
return Json(svm, JsonRequestBehavior.AllowGet);
}
使用断点检查参数时,将传递参数 -
作为回复,您将获得以下输出 -
答案 1 :(得分:1)
您应该在ajax请求中发布模型。 (您可以使用jquery .ajax metod),因为如果使用location.href