如何使用AJAX更新文本输入?

时间:2014-06-24 21:12:26

标签: jquery ajax asp.net-mvc-4 razor

所以我的强类型视图看起来像这样:

@model EmptyWeb.Models.SomeModel
@using (@Html.BeginForm(null, null, FormMethod.Post, new { id = "Form1" }))
{
    <fieldset>
        <div class="editor-field">
            @Html.EditorFor(model => model.firstValue)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.secondValue)
        </div>

        <p>
            <input id="Button1" type="button" value="Submit values"/>
        </p>
    </fieldset>        
}
<input id="Text1" type="text" />

Ajax看起来像这样:

$(function () {
$(document).ready(function () {
    $("#Button1").click(function () {              
            $.ajax({
                url: "ControllerName/ActionName",
                data: $("#Form1").serialize(),
                success: function (result) {
                    $('#Text1').val(result);
                },
            });
        });
    });  
});

最后行动看起来像这样:

public ActionResult ActionName(string firstValue, string secondValue)
    {
        if (firstValue > secondValue)
            return Content("some string");
        else
            return Content("some other string");
    }

我在这里尝试做的是将数据从表单发送到控制器,使用此数据执行一些操作,从控制器返回字符串并将此字符串写入表单外部的输入。在没有刷新页面的情况下完成所有这些,这就是我使用AJAX的原因。尝试这样做会让我无法加载资源:服务器响应状态为404(未找到)。不幸的是,我无法通过自己找到这个问题的解决方案。如果这是重复的问题,我很抱歉。所以我的问题是:我做错了什么?我该怎么做?我必须使用局部视图吗?

3 个答案:

答案 0 :(得分:1)

1)您需要在ajax调用中添加类型:

 $(function () {
    $(document).ready(function () {
        $("#Button1").click(function () {              
                $.ajax({
                    url: "ControllerName/ActionName",
                    data: $("#Form1").serialize(),
                    type:'POST'
                    success: function (result) {
                        $('#Text1').val(result);
                    },
                });
            });
        }); 


});

2)将属性httppost添加到控制器,并将字符串更改为模型名称作为操作参数

 [HttpPost]
public string ActionName(SomeModel model)
    {
        if (model.firstValue > model.secondValue)
            return "some string";
        else
            return "some other string";
    }

答案 1 :(得分:1)

我使用您的所有代码创建了一个测试应用程序,但将URL替换为我自己的方法,并且它工作得非常好。因此,我认为ajax代码的URL不正确。仔细检查您使用的网址,确保其正确无误。我还将.length添加到你要比较的字符串中。

注意:如果您的ajax在您的视图中,那么您可以通过以下方式轻松呈现正确的路径

url: "@Url.Action("ActionName")",

以下是我的观点:

@model MvcApplication1.Models.SomeModel
@using (@Html.BeginForm(null, null, FormMethod.Post, new { id = "Form1" }))
{
    <fieldset>
        <div class="editor-field">
            @Html.EditorFor(model => model.firstValue)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.secondValue)
        </div>

        <p>
            <input id="Button1" type="button" value="Submit values"/>
        </p>
    </fieldset>        
}
<input id="Text1" type="text" />
<script>
    $(function() {
        $(document).ready(function() {
            $("#Button1").click(function() {
                $.ajax({
                    url: "Home/ActionName",
                    data: $("#Form1").serialize(),
                    success: function(result) {
                        $('#Text1').val(result);
                    },
                });
            });
        });
    });
</script>

,这是我的控制器

namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            return View();
        }

        public ActionResult ActionName(string firstValue, string secondValue)
        {
            if (firstValue.Length > secondValue.Length)
                return Content("some string");
            else
                return Content("some other string");
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

答案 2 :(得分:0)

实际上你是对的,但现在我还有另一个问题。在我的输入文本中,我得到了视图的全部html内容。知道为什么我没有得到“某些字符串”或“其他字符串”吗?

我设法解决了这个问题。问题确实是我的url它应该是url:“ActionName”因为我的url已经是ControlName / ControlName,其中第二个ControlName实际上是一个行动名称。

感谢大家的帮助。