2013-11-23 2 views
1

Я пытаюсь отправить модель контроллеру с помощью вызова Ajax. Проблема в том, что в контроллере все свойства представления равны нулю.Передача модели из представления в контроллер с использованием вызова Ajax

Мои ViewModel является:

public class ActivityDetailsViewModel 
    { 
    public ActivityDto Activity { get; set; } 
    public string ClientName { get; set; } 
    public string ProjectName { get; set; } 
    public string Parent { get; set; } 
    public int? ParentId { get; set; } 
    public int? ProjectId { get; set; } 
    public bool UpdateFinancialDataRight { get; set; } 
    public int? Level { get; set; } 
    public bool HasViewFinancialDataRight 
    { 
     get 
     { 
      return HttpContext.Current.User.IsInRole(UserRole.ViewFinancialData) || 
        HttpContext.Current.User.IsInRole(UserRole.UpdateActivityFinancialData); 
     } 
    } 
    public bool HasUpdateFinancialDataRight 
    { 
     get 
     { 
      return HttpContext.Current.User.IsInRole(UserRole.UpdateActivityFinancialData); 
     } 
    } 
    public bool IsInEdit { get; set; } 
    public ActivityDetailsViewModel() 
    { 

    } 
    public DateTime? StartDate { get; set; } 
    public DateTime? EndDate { get; set; } 

    public ActivityDetailsViewModel(ActivityDto activity,int?parentId,int?projectId, string clientName, string projectName, string parent, bool updateFinancialDataRight,int? level,bool isInEdit) 
    { 
     this.Activity = activity; 
     this.ClientName = clientName; 
     this.ProjectName = projectName; 
     this.Parent = parent; 
     this.ParentId = parentId; 
     this.ProjectId = projectId; 
     this.Level = level; 
     this.IsInEdit = isInEdit; 
     StartDate = Utils.DateUtils.IntToDate(activity.StartDate); 
     EndDate = Utils.DateUtils.IntToDate(activity.EndDate); 
     UpdateFinancialDataRight = updateFinancialDataRight; 
    } 
} 

На мой взгляд, я следующее:

using (Ajax.BeginForm("Save", "Activities", new { activityId = @Model.Activity.Id }, new AjaxOptions() { OnBegin = "beforeSaving('" + @Model.Activity.Id + "')", OnSuccess = "handleSuccess" })) 
       { 
        <input id="btnRun" type="submit" value="submit" /> 

        @Html.TextBoxFor(m => m.ParentId, new { @class = "hiddenFiled" }) 
        @Html.TextBoxFor(m => m.ProjectId, new { @class = "hiddenFiled" }) 
        @Html.TextBoxFor(m => m.Level, new { @class = "hiddenFiled" }) 

......... }

Аякса вызова:

$("#btnRun").click(function (e) { 
    debugger; 
    e.preventDefault(); 
    var check = '@Html.Raw(Json.Encode(Model))'; 
    $.ajax({ 
     url: 'Activities/Save', 
     type: 'POST', 
     data: JSON.stringify(check), 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 
      alert(data); 
     } 
    });  
}); 

и в контроллере:

[HttpPost] 
    public ActionResult Save(ActivityDetailsViewModel view) 
    { 
     return PartialView("ActivitiesDetailsWindow", view); 
    } 
+0

Вы должны создать ViewModels в интерфейсе. –

+0

, почему вам нужно отправить его по вызову ajax, когда ваша страница о получении отправки и вы установили действие контроллера HttpPost', будут иметь ваши значения, если вы прошли ViewModel в действии контроллера. Что именно вы хотите достичь? Пожалуйста, дополните. – Rohit416

+0

Перед отправкой контроллеру, если свойство вида было изменено, у меня есть всплывающее окно (всплывающее окно с да/нет), и я хотел бы установить переменную с результатом всплывающего окна – user3024936

ответ

-1

В AJAX позвонить вы отправляете данные в виде строки:

data: JSON.stringify(check), 

Вы должны предоставить имя для объекта в AJAX вызова и он должен совпадать с именем аргумента в методе действия целевого контроллера , И нет нужды называть jSON-объект на клиенте. Так что это должно быть что-то вроде:

data: { myObject1: check}, 

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

public ActionResult Save(string myObject1) 

Тогда в действии вы можете десериализации объект JSON и создать модель или любой другой вам нужна обработка.

Смежные вопросы