#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»);