单击按钮时将值从javascript传递到MVC控制器函数

时间:2016-06-29 16:14:51

标签: javascript jquery asp.net-mvc razor

我有一个Html Button和一个剃刀EditFor文本框。这是为数据库添加内容。但是,我希望这个特定的按钮调用一个函数来从Web服务(IMDB)获取信息,以便填写其余的信息。以下是我对Razor部分的看法:

<div class="col-md-10">
            @Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
        </div>

我想取这个值,当点击'IMDB'按钮时,我想调用服务来获取JSON。继承人我的按钮:

     <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="button" id="IMDB" value="IMDB"  class="btn btn-default" onclick="AjaxDisplayString();" />
            </div>
        </div>

这是我在页面上的javascript:

<script>
    function AjaxDisplayString() {
        $.ajax({
            url: @Url.Action("CallIMDB"),
            method: 'GET',
            success: function(data) { alert(data); }
        });
    }

</script>

这从不调用我的控制器功能。该页面什么也没做。这是我的MVC控制器函数,应该被称为

public ActionResult CallIMDB(string title)
{
    var client = new WebClient();
    var json = client.DownloadString("http://www.omdbapi.com/?t=" + title.Replace(' ', '+') + "&y=&plot=short&r=json");
    var search = System.Web.Helpers.Json.Decode(json);
    return search;
}

所以,总结一下。我试图从我的剃刀获取编辑字段的标题值并将其传递给控制器​​函数以从IMDB Web服务获取JSON。但是,页面不执行任何操作,并且永远不会调用控制器函数。

1 个答案:

答案 0 :(得分:1)

要获取“标题”值,请更改您的脚本:

<script>
    function AjaxDisplayString() {
        var action = '@Url.Action("CallIMDB")'; // action must be between quotes
        var title = $("#Title").val(); // get the "Title" from input text

        var url = action + "?title=" + title; // get the complete url with route values

        $.ajax({
            url: url,
            method: 'GET',
            success: function(data) { alert(data); }
        });
    }

</script>