在这段代码中
@using (Ajax.BeginForm("MyAction", "MyRouteValues", new AjaxOptions { OnSuccess = "myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')" }))
为什么我的Javascript正确识别Model.IntegerParameter但Model.StringParameter识别为null
?我确定它在检查响应时有数据,它显示如下
data-ajax-success="myJSFunction(111111, 'AAAAAA')"
My View模型非常简单,看起来像这样
public class MyViewModel
{
public int IntegerParameter { get; set; }
public string StringParameter { get; set; }
}
我该如何解决这个问题?
已添加信息
我尝试将第二个参数更改为int,现在它不会传递为null
但0
仍然显示在FireBug的响应中。
我添加了Html.Raw,但它仍然在Javascript中获得null
值。
以下是我在控制台响应中获得的真实截图:
---------------另一次更新------------------
我尝试了所有的建议,但它似乎是 BUG MVC s#arp ?我试过不同的项目和不同的PC,它仍然适合我。我注意到这只会发生,如果它来自一个模型它看起来像在Javascript的响应之间发生的事情,无论是参数中的第一个,第二个还是任何位置但是如果我使用硬编码值,字符串的值都会丢失如:
myJSFunction(" + Model.IntegerParameter + ", 'AAAAAAAA')"
我得到了一个成功的结果,如果我使用这样的jQuery:
myJSFunction(" + Model.IntegerParameter + ", $('#SearchString').val())"
这也有效但是如果我确实传递了一个像这样的字符串的模型
myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')"
这不起作用。
所以你想看看现实世界中真正发生了什么,我考虑了@Darin和@Shark的建议。这是一个截图:
正如您在响应中看到的那样,它存在但是当传递给Javascript时,它会丢失。这是真实的Javascript以及
displayResultsPopUpWindow: function (model) {
var postData = {
transactionId: model.transactionId,
searchString: model.searchString
};
$.post("/Invoicing/GetSearchResults", postData, function (data) {
WindowHelper.displayWindow("Add Airline Transaction", "<div id='matchBookingResults'>" + unescape(data.viewHtml) + "</div>", 640, 500);
});
},
答案 0 :(得分:4)
无法重现此问题。试试这样:
型号:
public class MyViewModel
{
public int IntegerParameter { get; set; }
public string StringParameter { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
IntegerParameter = 1111,
StringParameter = "AA'AA\"AA"
});
}
[HttpPost]
public ActionResult MyAction()
{
return Json(new { foo = "bar" });
}
}
查看:
@model MyViewModel
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script type="text/javascript">
var myJSFunction = function (model) {
alert('intParam=' + model.intParam + ', strParam=' + model.strParam);
};
</script>
@using (Ajax.BeginForm(
"MyAction",
"Home",
new AjaxOptions
{
OnSuccess = "myJSFunction(" + Json.Encode(new { intParam = Model.IntegerParameter, strParam = Model.StringParameter }) + ")"
}
))
{
<button type="submit">OK</button>
}
使用AJAX提交表单时,会调用myJSFunction成功回调并传递正确的值。
答案 1 :(得分:1)
看起来这是一个Html编码的字符串。试着这样做:
Html.Raw(Model.StringParameter)
修改:试试这个:
OnSuccess = Html.Raw("myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')")
答案 2 :(得分:0)
看起来像S#arp架构中的一个错误,所以我只是使用jQuery来提取我需要的值,而不是使用模型
myJSFunction(" + Model.IntegerParameter + ", $('#SearchString').val())"
答案 3 :(得分:0)
您的searchString为null,可能是因为输入名称为SearchString - 字母大小写有意思。