3

I need some help. I write little app using ASP.NET MVC5 with JavaScript, jQuery, Ajax... and I can't send data from javascript to MVC Controller and change the model.

ViewModel

public class MyViewModel
{
//...
    public string SearchString { get; set; }
    public int? FirstInt { get; set; }
    public int? SecondInt { get; set; }
}

Javascript

    function keystroke() {
        var a = 0, b = 0;
        $('#search').keyup(function (event) { a = 1; });

        $('#search').keydown(function (event) { b = 1; });

        $("#search").keypress(function (event) {
            if (e.which === 13) {
                e.preventDefault();
                $('form').click(function () {
                    sendForm(a, b);
                });
            }
        });
    };
    function sendForm(a, b) {
        $.ajax({
            url: @Url.Action("Index", "Home"),
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({
                FirstInt: a,
                SecondInt: b
            }),
            success: function () {
                alert('success');
            }
        });
    };

View

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @class = "form-inline", role = "form" }))
            {
                <div class="form-group has-feedback">
                    @Html.TextBox("SearchString", ViewBag.SearchFilter as string, new
            {
                @class = "form-control",
                onclick="keystroke()",
                id = "search"
            })
                </div>
            }

Controller

public async Task<ActionResult> Index(MyViewModel model)
        {
            //...
            if (model.SearchString != null)
            {
                //...
                var a = model.FirstInt;
                var b = model.SecondInt;
            }
            //...
            return View(model);
        }

Help me, please, to send all the values to controller. Those that changed in JavaScript and what I enter in the textbox. Thanks.

11
  • url: @Url.Action("Index", "Home") ?? it is not an url Commented May 26, 2015 at 13:00
  • 1
    I try write url: "Home/Index" but it does not work too Commented May 26, 2015 at 13:03
  • Is it hit brake point when you send request in debug mode? Commented May 26, 2015 at 13:19
  • 1
    Html.BeginForm("Index", "Home", FormMethod.Post... this post works without HttpPost attribute, but I do not get the value from javascript, that's the problem. When I use brakepoint after the var b = model.SecondInt;, a and b are null Commented May 26, 2015 at 13:25
  • HttpPost is restriction to "listen" to post requests only, without that attribute the method "listening" for both GET and POST. Do you have "name" attribute in your HTML controls? Commented May 26, 2015 at 13:29

1 Answer 1

3

Javascript Code:

function keystroke() {
var a = 0, b = 0;
    $('#search').keyup(function (event) { a = 1; });

    $('#search').keydown(function (event) { b = 1; });

    $("#search").keypress(function (event) {
        if (e.which === 13) {
            e.preventDefault();
            $('form').click(function () {
                var text = $("#search").val()
                sendForm(a, b, text);
                return false;
            });
        }
    });

};
function sendForm(a, b, text) {
    var data = {FirstInt: a,SecondInt: b,SearchString: text}
    $.ajax({
        url: 'Home/Index',
        type: 'POST',
        contentType: 'application/json',
        data: data,
        success: function () {
            alert('success');
        }
    });
};

Controller Code

[HttpPost]
public async Task<ActionResult> Index(MyViewModel model)
    {
        //...
        if (model.SearchString != null)
        {
            //...
            var a = model.FirstInt;
            var b = model.SecondInt;
        }
        //...
        return View(model);
    }
Sign up to request clarification or add additional context in comments.

10 Comments

When I write some text in textbox and press enter key, SearchString get the value, but a and b are null
Plz, show me How do I change the view to only send ajax post?
does $("#search").keypress execute?
yes I tried, but most likely you're right and ajax post and FormMethod.Post in conflict
yes, $("#search").keypress works, I checked through the alert("keypress works");
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.