3

I am working ASP.NET MVC-5 app. I got form in Razor partial View and it require multiple models so i use ViewModel; putting all classes (models) reference in that as following

public class QualificationViewModel
{    
    public Qualification _Qualification;

    //public Subject _Subject;

    //public FeeScheme _FeeScheme;

}

now for time-being i am using only qualification model just to test my code but i am failing to send data from view to controller method. I am getting null value in debug in controller method

  [HttpGet]
    public ActionResult CreateNewQualification()
    {
        return PartialView("PartialQualification_Create");

    }

    [HttpPost]
    public ActionResult CreateNewQualification(QualificationViewModel newQualificationData)
    {
        try
        {
            if (ModelState.IsValid)
            {
                //code here...
            }
        }
        catch (DataException ex)
        {
            ModelState.AddModelError("", "Unable To Create New Qualification!" + ex);
        }

        return RedirectToAction("QualificationHome");
    }

I am using jQuery Ajax method to post the data, with similar way i have succeeded of sending data for single model class....

function submit_createNewQualification()
{      
    alert(JSON.stringify($("#NewQualificationForm").serializeObject()));

    $.ajax({
        type: "Post",
        url: "/Qualification/CreateNewQualification",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ newQualificationData: $("#NewQualificationForm").serializeObject() }),
        success: function (data) {
            if (data == true) {
                window.location = "/Qualification/QualificationHome";
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
        }
    });

}

and i have following form in view...

 @model DatabaseLayer.ViewModels.QualificationViewModel

  @using (Html.BeginForm("CreateNewQualification", "Qualification", FormMethod.Post, new { id = "NewQualificationForm" }))
    {
        @Html.AntiForgeryToken()
     <div class="form-group">
        @Html.LabelFor(model => model._Qualification.QualificationTitle, new { @class = "control-label col-md-3" })
           <div class="col-md-6">
             @Html.EditorFor(model => model._Qualification.QualificationTitle)
             @Html.ValidationMessageFor(model => model._Qualification.QualificationTitle)
           </div>
           </div>

           <div class="form-group">
              @Html.LabelFor(model => model._Qualification.Active, new { @class = "control-label col-md-3" })
             <div class="col-md-6 custom-checkBox-block-1">
               @Html.EditorFor(model => model._Qualification.Active)
               @Html.ValidationMessageFor(model => model._Qualification.Active)
              </div>
           </div>

     <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
             <input type="submit" value="Create Qualification" onclick="submit_createNewQualification()"  class="btn btn-default" />
         </div>
       </div>
}

many thanks...

2 Answers 2

4

try this

public class QualificationViewModel
{    
   public Qualification _Qualification {get; set;}

//public Subject _Subject;

//public FeeScheme _FeeScheme;

}

[HttpGet]
public ActionResult CreateNewQualification()
{
    var Model = new QualificationViewModel();
    return PartialView("PartialQualification_Create",model);

}
Sign up to request clarification or add additional context in comments.

Comments

3

You don't need to JSON stringify your model, you just simply send a serialized version of your form, default MVC model binding will handle the rest:

data: $("#NewQualificationForm").serialize()

1 Comment

ok i try in a minute as you said ... but test code with single model and it works... my issue i believe is in ViewModel!!!

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.