我可以通过Ajax请求将MVC控制器中的javascript返回

我可以通过Ajax请求将MVC控制器中的javascript返回

本文介绍了我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在ASP.net MVC 2.0应用程序中尝试这样做.我有一个包含两个字段number1和number2的表单.

I am trying to do like this in ASP.net MVC 2.0 Application. I have a form with two fields number1 and number2.

我想使用ajax请求将这两个数字相加两个.在控制器中,我收到两个数字,将它们相加并将结果存储在另一个字符串中.然后,我正在这样做:

I want add two these two numbers using an ajax request. In the controller, I am recieving two numbers ,adding them and storing result in another string. Then, I am doing like this:

    [HttpPost]
    public string TestAjax(FormCollection form)
    {
        int strnum1 = Convert.ToInt32(form["txtbox1"].ToString());
        int strnum2 = Convert.ToInt32(form["txtbox2"].ToString());
        string strnum3 = Convert.ToString(strnum1 + strnum2);
        if (strnum3 != null)
        {
            return "<script>alert("some message")</script>";
        }

        return string.Empty;

    }

是否可以从控制器操作中以字符串形式返回Java脚本?

Is it possible to return java script in the form of string from controller actions?

推荐答案

您可以返回 JavaScriptResult :

You could return a JavaScriptResult:

[HttpPost]
public ActionResult TestAjax(FormCollection form)
{
    int strnum1 = Convert.ToInt32(form["txtbox1"].ToString());
    int strnum2 = Convert.ToInt32(form["txtbox2"].ToString());
    return JavaScript("<script>alert(\"some message\")</script>");
}

为此,您必须配置AJAX请求以执行javascript.例如,如果您使用的jQuery如下所示:

For this to work you have to configure your AJAX request to execute javascript. For example if you are using jQuery that would look like this:

$.ajax({
    url: '/someaction',
    type: 'POST',
    data: { txtbox1: '12', txtbox2: '13' },
    dataType: 'script'
});

作为替代方案,您可以返回 JsonResult 会将模型序列化为JSON字符串:

As an alternative you could return a JsonResult which will serialize the model to a JSON string:

[HttpPost]
public ActionResult TestAjax(FormCollection form)
{
    int strnum1 = Convert.ToInt32(form["txtbox1"].ToString());
    int strnum2 = Convert.ToInt32(form["txtbox2"].ToString());
    string strnum3 = Convert.ToString(strnum1 + strnum2);
    return Json(new { sum = strnum3 });
}

然后:

$.ajax({
    url: '/someaction',
    type: 'POST',
    data: { txtbox1: '12', txtbox2: '13' },
    success: function(result) {
        alert(result.sum);
    }
});

正如您在这里看到的那样,您不再在控制器中将javascript与C#代码混合使用.遵守DRY原则.javascript属于javascript文件.

As you can see here you are no longer mixing javascript with C# code in your controller. Respect the DRY principle. javascript belongs in javascript files.

作为对该控制器操作的进一步改进,我建议您引入一个视图模型,并摆脱从FormCollection解析内容的可怕管道代码.这是默认模型联编程序的职责.

As further improvement to this controller action I would recommend you introducing a view model and get rid of the terrible plumbing code of parsing stuff from the FormCollection. That's the responsibility of the default model binder.

所以:

public class SumViewModel
{
    public int TxtBox1 { get; set; }
    public int TxtBox2 { get; set; }
}

然后:

[HttpPost]
public ActionResult TestAjax(SumViewModel model)
{
    int sum = model.TxtBox1 + model.TxtBox2;
    return Json(new { sum = sum });
}

结论:我们已将这种控制动作放在节食上,并将javascript移到了它所在的位置.

Conclusion: we have put this controller action on a diet, and moved the javascript where it belongs.

这篇关于我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 17:41