我想使用JavaScript从视图中调用操作,但我不能这样做: 这是我的代码:
@if (ViewBag.Status == true)
{
<script language="javascript" type="text/javascript">
if (confirm("Some message"));
//And here i want to add action call
</script>
}
我试图使用@ Html.Action,但这个破坏了脚本代码并确认消息没有显示。 当我按照此处所示编写它时:Calling ASP.NET MVC Action Methods from JavaScript:
@if (ViewBag.Status == true)
{
<script language="javascript" type="text/javascript">
if (confirm("Some message"));
{
$.ajax({
url: 'MyController/MyAction',
data: { id: id },
success: function () {
alert('Added');
}
});
}
</script>
}
没有改变。它显示确认对话框,但不显示调用方法
答案 0 :(得分:0)
除非您使用Ajax或其他客户端机制与服务器通信,否则JavaScript无法调用控制器操作!
您需要使用xhr来获取服务器或使用以下jQuery代码
<script src='jquery-latest.js'></script>
@if (ViewBag.Status == true)
{
<script language="javascript" type="text/javascript">
if (confirm("Some message")){
//And here i want to add action call
$.get('@Url("action","controller",null)')
.done(function(data){
//use loaded data here
}).fail(function(e,f,g){
console.log({e:e,f:f,g:g})
});
}
</script>
}
PS:别忘了引用jQuery库
答案 1 :(得分:0)
如果我理解正确,你想通过javascript在控制器中调用你的Action方法。并在成功时显示确认信息。
以下是代码:
if ('@ViewBag.Status' == true)
{
$.ajax({
type: "Post",
url: '@Url.Action("MyAction", "MyController")',
data: { Id: Id },
dataType: "json",
traditional: true,
success: function (data) {
alert("Success");
},
});
}
要获得成功,您需要从控制器返回JsonResult或ContentResult或ActionResult。
答案 2 :(得分:0)
您需要将代码更改为此类型。在这种情况下,您可以调用:func(@ViewBag.Status)
@Section scripts
<script language="javascript" type="text/javascript">
//val in this case being the value of the ViewBag passed from where the call is occurring
function func(val) {
if (val == true) {
if (confirm("Some message"));
{
$.ajax({
url: 'MyController/MyAction',
data: { id: id },
type: "POST",
success: function () {
alert('Added');
}
});
}
}
}
</script>
end section
同样在控制器中,记得在方法上应用[HttpPost]
属性,如下所示:
[HttpPost]
public ActionResult MyAction(string id)
{
// your code
return Json();//your response
}