ورود

View Full Version : سوال: نحوه ارسال مدل از طریق ajax



leila.net
سه شنبه 20 اسفند 1392, 21:03 عصر
با سلام
دوستان من تو یه view دارم که داخلش سه تا فرم با input type=submit مجزا دارم و البته یه action که بسته به button که کلیک میشه کدهای مربوط به هر فرم رو اجرا می کنه . خب تا اینجا همه چیز وقتی با فرم ها کار می کنم درست کار میکنه . مشکل وقتی پیش میاد که می خوام یکی از این ایونت ها ( submit ) ها یه ajax call انجام بدن .



[HttpPost]
public ActionResult EditProfile(Models.Profile model, string submitButton)
{
///------------------- my code here
}


و این هم تعریف فرمم :


@model MVCallinone.Models.Profile
@using (Html.BeginForm())

{
@Html.AntiForgeryToken()
///------------------- html tag here
}



برا اینکار از کدهای زیر استفاده می کنم :

<script type="text/javascript">
$(function () {
$("#btnuser").on("click", function (event) {

event.preventDefault();
var form = $(this).parent("form");
$.ajax({
type: "POST",
url: form.attr('action'),
data:form.serialize()

}).success(function () { })
.error(function () { });
return false;

});

});
</script>

Action من اجرا میشه ولی متاسفانه model ی که در فرم استفاده شده مقادیری که به action ارسال میکنه تو این روش null هستش .
البته باید بگم من تازه mvc رو شروع کردم و شاید روشی که استفاده می کنم درست نباشه . به هر حال ممنون میشم راهنمایی کنین .

hakim22
سه شنبه 20 اسفند 1392, 23:01 عصر
به مثال زیر رجوع کنید :

http://barnamenevis.org/showthread.php?416558-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-Ajax-%D8%AF%D8%B1-ASP-MVC-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%AB%D8%A8%D8%AA-%D9%86%D8%B8%D8%B1%D8%AF%D9%87%DB%8C

helpsos
سه شنبه 16 اردیبهشت 1393, 10:26 صبح
با سلام
من از کد زیر استفاده کردم ولی خروجی به این صورت است که در عکس میبینید
کدهای ویو
@model ModelLayer.AddstudentViewModel

@using (Html.BeginForm(actionName: "AddStudent", controllerName: "Enrol",
method: FormMethod.Post,
htmlAttributes: new { id = "studentform" }))
{
@Html.AntiForgeryToken()


<div class="form-horizontal">
// other code
<div class="form-group">
<div class="col-md-offset-2 col-md-9">
<input type="submit" id="btnsave" value="ثبت" class="btn btn-default" />
</div>
<div id="results" style="display: none"></div>


</div>
</div>
}


کدهای script

@section JavaScript
{
<script type="text/javascript">
$(function() {
$("#btnsave").on("click", function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: '@Url.Action("AddStudent", "Enrol")',
data: $('form').serialize(),
dataType: 'json'
}).success(function(data) {
toastr.options = { "positionClass": "toast-top-left", "timeOut": "5000" }; // set Position Alert
toastr.success(data.message,{"positionClass": "toast-top-left"}); // Show Alert
$('#myTab a[href="#phone"]').tab('show'); // Switch to Phone Tab
})
.error(function() {});
return false;
});


و کدهای کنترلر

[HttpPost]
public ActionResult AddStudent(AddstudentViewModel addstudentViewModel)
{
if (ModelState.IsValid)
{
var student = new Student();
Mapper.Map(addstudentViewModel, student);
_studentService.AddStudent(student);
_uow.SaveChanges();
TempData["studentid"] = student.StudentId;
TempData["studname"] = addstudentViewModel.StudentFname + " " + addstudentViewModel.StudentLname;
var message ="اطلاعات " + addstudentViewModel.StudentFname + " " + addstudentViewModel.StudentLname + " ثبت گردید";
return Json(new{message}, JsonRequestBehavior.AllowGet);
}
//var termlist = _termService.GetAllTerms();
//ViewBag.Term = new SelectList(termlist, "TermId", "TermName");
ViewBag.English = DropDownList.English();
ViewBag.UknownTome = DropDownList.UknowToMe();
ViewBag.Soldire = DropDownList.Soldire();
ViewBag.Segment = DropDownList.Segment();


return PartialView("_AddStudent", addstudentViewModel);
}

ولی خروجی به صورت زیر است
118697
کسی می تونه راهنمایی کنه؟:ناراحت:

kavayo
سه شنبه 16 اردیبهشت 1393, 12:07 عصر
برنامه درست کار میکنه حال شما بایستی پیام موفقیت امیز خروجی از اکشن مورد نظرتان را در متد اسکریپت {}(success(function(dataمدیریت کنید .

helpsos
سه شنبه 16 اردیبهشت 1393, 15:38 عصر
سلام
منم تو همین کد این کار رو کردم toastr.success(data.message)
ولی نمیدونم چرا این طوری بهم پاسخ میده ؟
میشه بیشتر راهنمایی کنین؟