Reputation: 330
I want to call action from view using JavaScript, but I can't do this: Here is my code:
@if (ViewBag.Status == true)
{
<script language="javascript" type="text/javascript">
if (confirm("Some message"));
//And here i want to add action call
</script>
}
I'm trying to use @Html.Action, but this ruined script code and confirm message didn't show. When I write it as shown here: 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>
}
nothing changed. It displays confirmation dialog but don't calling method
Upvotes: 2
Views: 20684
Reputation: 1141
You need to change your code to something like this.In which case you would call: 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
Also in the controller remember to apply the [HttpPost]
attribute on the method like so:
[HttpPost]
public ActionResult MyAction(string id)
{
// your code
return Json();//your response
}
Upvotes: 3
Reputation: 8184
JavaScript cannot call a controller action unless you use Ajax or another client side mechanism to talk to the server!
What you need it to use xhr to tak to the server or use following jQuery code
<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: don't forget to reference the jQuery library
Upvotes: 0
Reputation: 166
If i understood you correctly, you want to call your Action method in controller from javascript. And show confirm message on success.
Here is the code for that:
if ('@ViewBag.Status' == true)
{
$.ajax({
type: "Post",
url: '@Url.Action("MyAction", "MyController")',
data: { Id: Id },
dataType: "json",
traditional: true,
success: function (data) {
alert("Success");
},
});
}
To hit the success, you need to return the JsonResult or ContentResult or ActionResult from controller.
Upvotes: 1