Передача данных модели формы строгого типа в asp.net mvc через jquery

#asp.net-mvc-3 #jquery

#asp.net-mvc-3 #jquery

Вопрос:

Легко отправить форму в метод действия в контроллере, который имеет строго типизированные текстовые поля, например, с помощью кнопки отправки, но что, если я хочу отправить точно такую же форму со строго типизированными текстовыми полями через jquery, возможно, вызов $.ajax после того, как было нажато что-то еще.

код, подобный этому:

  @Html.TextBoxFor(m => m.topTenFav.YoutubeLink,new { id="youTubeLinkTxt"})
  

выполняет всю работу за нас, и очень просто сопоставить свойства нашего объекта в контроллере

  [HttpPost]
 public ActionResult AddTopTenFav(HomeViewModel topTen)
 {
     topTen.topTenFav.Date = DateTime.Now;
     topTen.topTenFav.UserName = User.Identity.Name;
     repository.AddTopTen(topTen);
     repository.Save();
     return RedirectToAction("Index");
 } 
  

Как бы я отправил эту форму на контроллер, сопоставил текстовые поля в форме со свойствами объекта при событии щелчка, например

  $("#btnAddGenre").click(function () {}

 @using (Html.BeginForm(
        "AddTopTenFav", "Home", FormMethod.Post, new { id = "AddTopTenFavForm" }))
 {

    <span id="youTubeLinkSpan">Youtube Link</span>
    <div>
        @Html.TextBoxFor(m => m.topTenFav.YoutubeLink,new { id="youTubeLinkTxt"})
    </div>
    <span id="youTubeNameSpan">Song Title</span>
    <div>
        @Html.TextBoxFor(m => m.topTenFav.Title,new { id="youTubeNameTxt"})
    </div>

    <button type="submit" name="btnSubmit" value="">submit</button>
 }
  

Комментарии:

1. почему вы поместили форму внутри анонимной функции, которая запускается при событии щелчка?

2. после более подробного рассмотрения вашего кода я заметил, что вы просто забыли закрыть функцию click, касающуюся возможности выполнения вызова ajax, asp.net у mvc есть вспомогательный Ajax.BeginForm, таким образом, вы можете использовать встроенную поддержку, если вам так угодно.

Ответ №1:

Вы можете выполнить следующее сообщение:

 $(document).ready(function(){
    $('#btnAddGenre').click(function () {
        $.post(
            $('#AddTopTenFavForm').attr('action'),
            $('#AddTopTenFavForm').serialize,
            function (data) {
                window.location = @Url.Action("Index");
            },
            'html' // returned data type
        );
    });
});
  

Я использую тип данных html, чтобы вы могли возвращать все, что хотите, и перенаправление происходит при window.location использовании @Url.Action для указания местоположения.

Пожалуйста, если это сработает, отметьте как принятый ответ

Комментарии:

1. Вы помещаете javascript в свое представление. Я немного изменился. Попробуйте еще раз и расскажите мне, что произошло.

Ответ №2:

да, вы можете опубликовать данные строго типизированного textboxex с помощью jquery. Сначала вам нужно принять значения всех textboxex в jquery, используя приведенный ниже код.

             var xx= $("#xx").val();
  

это даст значение в xx из вашего текстового поля mvc.
Затем с помощью jquery ajax call вы можете вызвать метод action.
код приведен ниже.

 $.get("/XXXX/YY/1", { xxName: xx }, function (data) {
                    var status = data;
                    alert(status);
                    if (status) {
                        return true;
                    }
                    else {
                        alert("The book with this name is already present. TRY DIFFERENT NAME!")
                        return false;
                    }
                });
  

здесь xxxx — контроллер, а yy — имя метода действия.следующий параметр — это значение всех текстовых полей, которые вы хотите отправить в качестве параметра.
Это выполнит вызов ajax и вернет значение.

Пожалуйста, скажите мне, если вы обнаружите какие-либо проблемы, я предоставлю весь код.

Комментарии:

1. Хорошее решение. Вы предполагаете, что он возвращает true из контроллера и создает вручную все параметры, которые вы хотите передать через запрос get.

2. Нет, я предполагаю, что поскольку он работает в MVC3 с razor, то, я думаю, он может понять, что ему нужно получить или опубликовать. таким образом, он может манипулировать им в соответствии. по его требованию. Поскольку я скопировал и вставил код jquery, поэтому по ошибке я забыл изменить его на post. А для параметра вы можете взять параметр в jquery и легко отправить значения в методе post, используя этот процесс. Вы можете попробовать этот метод, так как он очень прост, и спасибо, что предупредили меня о моей ошибке, спасибо

3. извините, что не ответил, но это действительно не сработало для меня. Я нашел рабочее решение проблемы mz $.post(«/ Home/AddTopTenFav», $(«#AddTopTenFavForm»).serialize(), функция (json) { // обрабатывать ответ }, «json»);