C# 获取Json控制器方法的参数
我正在尝试获取ViewModel并将其传递给Json方法,方法如下: 我认为:C# 获取Json控制器方法的参数,c#,asp.net-mvc,json,C#,Asp.net Mvc,Json,我正在尝试获取ViewModel并将其传递给Json方法,方法如下: 我认为: <input type="button" id="suggestionBtn" title="Suggestion" onclick ="location.href='@Url.Action("GetNextAppointment", "Home", new { svm = Model })'" /> 在调试时,我发现我的svm是空的。我试图用一个字符串参数替换它,并在我的视图中对值进行硬编码,这是可行
<input type="button" id="suggestionBtn" title="Suggestion" onclick ="location.href='@Url.Action("GetNextAppointment", "Home", new { svm = Model })'" />
在调试时,我发现我的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>
@model AstellasSchedulerV2.Models.SuggestionViewModel
@使用(Html.BeginForm(“NewAppointment”、“Home”、FormMethod.Post、new{@id=“form_validateapointment”}))
{
@Html.Hidden(“stringParam”,“字符串参数”)
补丁Anti-douleur Corps@Html.CheckBoxFor(s=>s.PADC,新的{@class=“checkbox”,@id=“chbxPADC”})
修补程序Anti-douleur-Pied@Html.CheckBoxFor(s=>s.PADP,new{@class=“checkbox”,@id=“chbxPADP”})
}
$(文档).ready(函数(){
$(“#单击我”)。单击(函数(){
var o=新对象();
o、 PADC=$(“#chbxPADC”).val();
o、 PADP=$(“#chbxPADP”).val();
jQuery.ajax({
类型:“POST”,
url:“@url.Action(“GetJson”)”,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”,
数据:JSON.stringify(o),
成功:函数(data){alert(data.PADC);},
失败:函数(errMsg){alert(errMsg);}
});
});
location.href
您应该在ajax请求中发布您的模型。(您可以使用jquery.ajax metod),因为如果您使用
location.href
则无法从controller action metod获取值。下面是解决方案,假设您的viewmodel是这样的-
public class SuggestionViewModel
{
public bool PADC { get; set; }
public bool PADP { get; set; }
}
然后您可以通过以下方式获得一个视图。在这里,我使用JQuery向GetJson控制器操作发出POST请求。我构建了一个JavaScript对象,然后将其序列化为Json。最后将Json字符串传递给控制器操作
<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>
当您使用断点检查参数时,将传递参数-
作为响应,您将获得以下输出-
解决方案来了,假设您的viewmodel是这样的-
public class SuggestionViewModel
{
public bool PADC { get; set; }
public bool PADP { get; set; }
}
然后您可以通过以下方式获得一个视图。在这里,我使用JQuery向GetJson控制器操作发出POST请求。我构建了一个JavaScript对象,然后将其序列化为Json。最后将Json字符串传递给控制器操作
<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>
当您使用断点检查参数时,将传递参数-
作为响应,您将获得以下输出-
谢谢你的回答,但我对所有这些东西都很陌生。请你看一下拉法埃尔·阿尔特豪斯发布的解决方案的第二部分,好吗?我想这样做,但不幸的是,这两部分都不起作用(我已经发布了解释)。谢谢你的回答,但我对所有这些东西都很陌生。你能看一下拉法埃尔·阿尔特豪斯发布的解决方案的第二部分吗?我想这样做,但不幸的是,它也不起作用(我已经发布了解释)。谢谢,这似乎是一个严肃的解决方案!但是,有一个小问题:我如何将我的ViewModel传递到“o”?这里您已经硬编码了,但我如何“动态”执行它?@Traffy您可以使用JQuery获取输入元素的值,例如,您有一个id为=“txt1”的输入文本,然后您可以在JQuery中获取其值,如
$(“#txt1”).val()
。然后您可以在代码中动态构造对象并将其发送到服务器。我想差不多完成了。当我按照您所说的那样做时(使用$(“#txt1”).val()
),即使不是,也总是正确的。抱歉,你知道吗?:/当我检查html源代码时,它显然是错误的…@Traffy,我用你的确切要求更新了我的答案:-)。它是有效的,请不要忘记将其标记为答案。如果可能的话,请向上投票:-)。谢谢,这似乎是一个严肃的解决方案!但是,有一个小问题:我如何将我的ViewModel传递到“o”?这里您已经对其进行了硬编码,但我如何“动态地”执行它“?@Traffy您可以使用JQuery获取输入元素的值,例如,您有一个id为=“txt1”的输入文本,然后您可以在JQuery中获取其值,如$(“#txt1”).val()
。然后您可以在代码中动态构建对象并将其发送到服务器。我想差不多完成了。当我按照您所说的那样做时(使用$(“#txt1”).val()
),即使不是,也总是正确的。抱歉,你知道这一点吗?:/当我检查html源代码时,它显然是错误的…@Traffy,我用你的确切要求更新了我的答案:-)。如果有效,请不要忘记将其标记为答案。如果可能,请投赞成票:-)。
public JsonResult GetJson(SuggestionViewModel svm)
{
return Json(svm, JsonRequestBehavior.AllowGet);
}