i am trying submit form but it is not hitting no my post action method. i am also loading partial view through ajax but where ever i am passing orderViewModel it stop working. i also tried to used [FromBody] like Create([FromBody]OrderViewModel model) It giving me 415 error. Link to my previous post
@model SoftwareHouseWeb.ViewModel.OrderViewModel.OrderViewModel
@using SoftwareHouseWeb.Data.Models.Orders
@{
ViewData["Title"] = "Order";
Layout = "~/Views/Shared/_Layout1.cshtml";
List<string> Preferences = new List<string>() { "Phone", "Chat", "Email", "SMS" };
}
<form method="post" asp-controller="Order" asp-action="Create" class="signup-form">
<div>
<div asp-validation-summary="All" class="text-danger"></div>
<div class="signup-form" id="page_1">
<div class="head">
<h1>Your Personal Details</h1>
</div>
<div class="ui big form">
<div class="two fields">
<div class="six wide field">
<label>Name</label>
<input asp-for="cus_name" placeholder="Name">
<span asp-validation-for="cus_name" class="text-danger"></span>
</div>
<div class="six wide field">
<label>Email</label>
<input asp-for="Email" placeholder="Email">
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="two fields">
<div class="six wide field">
<select asp-for="Country" class="ui search dropdown">
<option value="">Select Country</option>
<option value="AF">Afghanistan</option>
<option value="AX">Åland Islands</option>
<option value="AL">Albania</option>
<option value="DZ">Algeria</option>
<option value="AS">American Samoa</option>
<option value="AD">Andorra</option>
<option value="AO">Angola</option>
<option value="AI">Anguilla</option>
<option value="AQ">Antarctica</option>
<option value="AG">Antigua and Barbuda</option>
<option value="AR">Argentina</option>
<option value="AM">Armenia</option>
<option value="AW">Aruba</option>
<option value="AU">Australia</option>
<option value="AT">Austria</option>
<option value="AZ">Azerbaijan</option>
<option value="BS">Bahamas</option>
<option value="BH">Bahrain</option>
<option value="BD">Bangladesh</option>
<option value="BB">Barbados</option>
<option value="YE">Yemen</option>
<option value="ZM">Zambia</option>
<option value="ZW">Zimbabwe</option>
</select>
<span asp-validation-for="Country" class="text-danger"></span>
</div>
<div class="six wide field">
<input asp-for="cus_phone" placeholder="Phone Number">
<span asp-validation-for="cus_phone" class="text-danger"></span>
</div>
</div>
<div class="two fields">
<div class="six wide field">
<label>Select First preferred medium</label>
<select asp-for="FirstPreferences" class="custom-select mr-sm-2"
asp-items="@(new SelectList(Preferences))">
<option value="">Select</option>
</select>
<span asp-validation-for="FirstPreferences" class="text-danger"></span>
</div>
<div class="six wide field">
<label>Select 2ND preferred medium</label>
<select asp-for="SecondPreferences" class="custom-select mr-sm-2"
asp-items="@(new SelectList(Preferences))">
<option value="">Select</option>
</select>
<span asp-validation-for="SecondPreferences" class="text-danger"></span>
</div>
</div>
<div class="" style="margin: 2rem;">
<h2>
Time Preferences
</h2>
<p>Please provide preferred time to contact you according to your area. We highly recommend you to provide more than one preferred contact time. This will increase your availability and will expedite the communication procedure.</p>
</div>
<div class="two fields">
<div class="six wide field">
<label>Select First Time Preferences</label>
<div class="row">
<div class="col-2">
<div class="ui selection dropdown time">
<select asp-for="FirstPreferedTimeStart" class="menu">
<option value="">HH:MM</option>
<option value="00:00:00">00:00</option>
<option value="01:00:00">01:00</option>
<option value="02:00:00">02:00</option>
<option value="03:00:00">03:00</option>
<option value="04:00:00">04:00</option>
<option value="05:00:00">05:00</option>
<option value="06:00:00">06:00</option>
<option value="07:00:00">07:00</option>
<option value="08:00:00">08:00</option>
<option value="09:00:00">09:00</option>
<option value="10:00:00">10:00</option>
<option value="11:00:00">11:00</option>
<option value="12:00:00">12:00</option>
<option value="13:00:00">13:00</option>
<option value="14:00:00">14:00</option>
<option value="15:00:00">15:00</option>
<option value="16:00:00">16:00</option>
<option value="17:00:00">17:00</option>
<option value="18:00:00">18:00</option>
<option value="19:00:00">19:00</option>
<option value="20:00:00">20:00</option>
<option value="21:00:00">21:00</option>
<option value="22:00:00">22:00</option>
<option value="23:00:00">23:00</option>
</select>
</div>
<span asp-validation-for="FirstPreferedTimeStart" class="text-danger"></span>
</div>
<div class="col-2">
<div class="ui selection dropdown time">
<select asp-for="FirstPreferedTimeEnd" class="menu">
<option value="">HH:MM</option>
<option value="00:00:00">00:00</option>
<option value="01:00:00">01:00</option>
<option value="02:00:00">02:00</option>
<option value="03:00:00">03:00</option>
<option value="04:00:00">04:00</option>
<option value="05:00:00">05:00</option>
<option value="06:00:00">06:00</option>
<option value="07:00:00">07:00</option>
<option value="08:00:00">08:00</option>
<option value="09:00:00">09:00</option>
<option value="10:00:00">10:00</option>
<option value="11:00:00">11:00</option>
<option value="12:00:00">12:00</option>
<option value="13:00:00">13:00</option>
<option value="14:00:00">14:00</option>
<option value="15:00:00">15:00</option>
<option value="16:00:00">16:00</option>
<option value="17:00:00">17:00</option>
<option value="18:00:00">18:00</option>
<option value="19:00:00">19:00</option>
<option value="20:00:00">20:00</option>
<option value="21:00:00">21:00</option>
<option value="22:00:00">22:00</option>
<option value="23:00:00">23:00</option>
</select>
</div>
<span asp-validation-for="FirstPreferedTimeEnd" class="text-danger"></span>
</div>
</div>
</div>
<div class="six wide field">
<label>Select Second Time Preferences</label>
<div class="row">
<div class="col-2">
<div class="ui selection dropdown time">
<select asp-for="SecondPreferedTimeStart" class="menu">
<option value="">HH:MM</option>
<option value="00:00:00">00:00</option>
<option value="01:00:00">01:00</option>
<option value="02:00:00">02:00</option>
<option value="03:00:00">03:00</option>
<option value="04:00:00">04:00</option>
<option value="05:00:00">05:00</option>
<option value="06:00:00">06:00</option>
<option value="07:00:00">07:00</option>
<option value="08:00:00">08:00</option>
<option value="09:00:00">09:00</option>
<option value="10:00:00">10:00</option>
<option value="11:00:00">11:00</option>
<option value="12:00:00">12:00</option>
<option value="13:00:00">13:00</option>
<option value="14:00:00">14:00</option>
<option value="15:00:00">15:00</option>
<option value="16:00:00">16:00</option>
<option value="17:00:00">17:00</option>
<option value="18:00:00">18:00</option>
<option value="19:00:00">19:00</option>
<option value="20:00:00">20:00</option>
<option value="21:00:00">21:00</option>
<option value="22:00:00">22:00</option>
<option value="23:00:00">23:00</option>
</select>
</div>
<span asp-validation-for="SecondPreferedTimeStart" class="text-danger"></span>
</div>
<div class="col-2">
<div class="ui selection dropdown time">
<select asp-for="SecondPreferedTimeEnd" class="menu">
<option value="">HH:MM</option>
<option value="00:00:00">00:00</option>
<option value="01:00:00">01:00</option>
<option value="02:00:00">02:00</option>
<option value="03:00:00">03:00</option>
<option value="04:00:00">04:00</option>
<option value="05:00:00">05:00</option>
<option value="06:00:00">06:00</option>
<option value="07:00:00">07:00</option>
<option value="08:00:00">08:00</option>
<option value="09:00:00">09:00</option>
<option value="10:00:00">10:00</option>
<option value="11:00:00">11:00</option>
<option value="12:00:00">12:00</option>
<option value="13:00:00">13:00</option>
<option value="14:00:00">14:00</option>
<option value="15:00:00">15:00</option>
<option value="16:00:00">16:00</option>
<option value="17:00:00">17:00</option>
<option value="18:00:00">18:00</option>
<option value="19:00:00">19:00</option>
<option value="20:00:00">20:00</option>
<option value="21:00:00">21:00</option>
<option value="22:00:00">22:00</option>
<option value="23:00:00">23:00</option>
</select>
</div>
<span asp-validation-for="SecondPreferedTimeEnd" class="text-danger"></span>
</div>
</div>
</div>
</div>
<div class="form-group">
<label asp-for="Message" class="control-label "></label>
<textarea asp-for="Message" class="form-control"> </textarea>
<span asp-validation-for="Message" class="text-danger"></span>
</div>
<input type="button" onclick="PageNext(this.parentElement.parentElement)" class="ui primary submit button" value="SAVE & CONTINUE" />
</div>
</div>
<div id="page_2" style="display:none">
<div>
<h1 id="heading">Choose a Package!</h1>
</div>
<div class="buttons">
@foreach (var services in Model.ServicesPackages)
{
<a href="#service_@services.Ser_Id"><div class="logo-p"><h2>@services.Ser_Name</h2></div></a>
}
</div>
<!-- packages -->
@for (int i = 0; i < Model.ServicesPackages.Count; i++)
{
<div class="packages" id="service_@Model.ServicesPackages[i].Ser_Id">
<h1 id="custom-website-design">
@Model.ServicesPackages[i].Ser_Name
</h1>
<div class="packs-content">
@for (int j = 0; j < Model.ServicesPackages[i].Packages.Count(); j++)
{
<div class="pack1">
<div class="pack-price">
<div>
<input asp-for="@Model.ServicesPackages[i].Packages[j].id" hidden />
<input asp-for="@Model.ServicesPackages[i].Packages[j].PkgName" hidden />
<input asp-for="@Model.ServicesPackages[i].Packages[j].Ser_Id" hidden />
<input asp-for="@Model.ServicesPackages[i].Packages[j].Ser_Name" hidden />
<h1>@Model.ServicesPackages[i].Packages[j].PkgName</h1>
<p>@Model.ServicesPackages[i].Packages[j].Ser_Name PACKAGE</p>
</div>
<p>$@Model.ServicesPackages[i].Packages[j].TotalPrice</p>
<input asp-for="@Model.ServicesPackages[i].Packages[j].TotalPrice" hidden />
<input asp-for="@Model.ServicesPackages[i].Packages[j].LaunchDate" hidden />
</div>
<div class="pack-features">
<div class=""></div>
@foreach (var features in Model.ServicesPackages[i].Packages[j].Description)
{
<h2>@features</h2>
}
</div>
<div class="pack-order">
<div class="row-1">
@{
double discount = (Model.ServicesPackages[i].Packages[j].DiscountPercent / 100 * Model.ServicesPackages[i].Packages[j].TotalPrice);
double PriceAfterDiscount = Model.ServicesPackages[i].Packages[j].TotalPrice - discount;
}
<p>SPECIAL DISCOUNT</p>
<P>-$@discount</P>
</div>
<div class="row-2">
<p>FINAL PRICE FOR LIMITED TIME</p>
</div>
<div class="row-3">
<a asp-controller="Packages" asp-action="Detail" asp-route-id="@Model.ServicesPackages[i].Packages[j].id" target="_blank">view details</a>
<h1>$@PriceAfterDiscount</h1>
<input asp-for="@Model.ServicesPackages[i].Packages[j].DiscountPercent" hidden />
</div>
<div class="row-4">
<h4>Add To Buying List</h4>
<div class="input-group mb-3 order-btn-pack">
<div class="input-group-prepend">
<div class="input-group-text">
<input asp-for="@Model.ServicesPackages[i].Packages[j].is_selected" >
</div>
</div>
<input asp-for="@Model.ServicesPackages[i].Packages[j].Quantity" value="1" min="1" class="form-control" >
</div>
</div>
<div class="row-5">
<p>Discuss this offer with expert</p>
<div class="discuss">
<p>12345467889</p>
<p id="chat-btn_10">Live Chat</p>
</div>
</div>
</div>
</div>
}
</div>
</div>
}
<div>
<button type="button" class="btn btn-danger px-2 btn-lg" onclick="PageBack(this.parentElement.parentElement)">Back</button>
<button type="button" class="btn btn-danger px-2 btn-lg" id="summary">Summary!</button>
</div>
</div>
<div class="order-summary" id="page_3">
</div>
</div>
</form>
@section Scripts{
<link rel="stylesheet" href="~/css/signup.css">
<script>
$(document).ready(function () {
$("#summary").click(function () {
const packag = [];
$('.pack1').each(function (i, pack) {
const obj = {};
const inp = $(this).find(':input');
let c= inp.filter('[id*="is_selected"]:checked');
obj['id'] = inp.filter('[id*="id"]').val();
obj['PkgName'] = inp.filter('[id$="PkgName"]').val();
obj['Ser_Id'] = inp.filter('[id$="Ser_Id"]').val();
obj['Ser_Name'] = inp.filter('[id$="Ser_Name"]').val();
obj['TotalPrice'] = inp.filter('[id$="TotalPrice"]').val();
obj['DiscountPercent'] = inp.filter('[id*="DiscountPercent"]').val();
obj['is_selected'] = c.length != 0 ? true : false;
obj['Quantity'] = inp.filter('[id*="Quantity"]').val();
packag.push(obj);
});
const model = {
cus_name: $('#cus_name').val(),
Country: $('#Country').val(),
cus_phone: $('#cus_phone').val(),
Email: $('#Email').val(),
FirstPreferences: $('#FirstPreferences').val(),
SecondPreferences: $('#SecondPreferences').val(),
FirstPreferedTimeStart: $('#FirstPreferedTimeStart').val(),
FirstPreferedTimeEnd: $('#FirstPreferedTimeEnd').val(),
SecondPreferedTimeStart: $('#SecondPreferedTimeStart').val(),
SecondPreferedTimeEnd: $('#SecondPreferedTimeEnd').val(),
Message: $('#Message').val(),
HoldPackage: JSON.stringify(packag)
};
//console.log("calling summary",model);
//event.preventDefault();
$.ajax({
type: "post",
url: "/Order/ShowSummary",
cache: false,
data: model,
}).done(function (data) {
$('#page_2').hide();
$('#page_3').show();
$('#page_3').html(data);
}).catch(function ()
{
console.log("Done")
});
})
});
function PageNext(ele) {
const id = ele.getAttribute('id').split("_")[1];
const next = parseInt(id) + 1;
$("#col_" + id).removeClass('on');
$("#col_" + next).addClass('on');
$("#page_" + id).hide();
$("#page_" + next).show();
}
function PageBack(ele) {
const id = ele.getAttribute('id').split("_")[1];
const previous = parseInt(id) - 1;
$("#col_" + id).removeClass('on');
$("#col_" + previous).addClass('on');
$("#page_" + id).hide();
$("#page_" + previous).show();
}
</script>
}
//My OrderView Model
public class OrderViewModel
{
public OrderViewModel()
{
OrderPackages =new List<OrderPackagesViewModel>();
OrderTeam = new List<OrderTeamViewModel>();
ServicesPackages = new List<GroupByServices>();
}
[Display(Name = "Order ID")]
public int order_id { get; set; }
public string Encryptedorder_id { get; set; }
[Required]
[DataType(DataType.Date)]
public System.DateTime Date { get; set; }
public int countOrder { get; set; }
#region User's Data
public int cus_id { get; set; }
[Display(Name = "Customer Name")]
[Required]
public string cus_name { get; set; }
[Display(Name = "Country Name")]
public string Country { get; set; }
[Display(Name = "Customer Phone")]
[RegularExpression(@"^[0][1-9]\d{9}$|^[1-9]\d{9}$", ErrorMessage = "Must be Phone No")]
[Required]
public string cus_phone { get; set; }
[EmailAddress]
public string Email { get; set; }
[Required]
public string FirstPreferences { get; set; }
[Required]
public string SecondPreferences { get; set; }
[Required]
public TimeSpan FirstPreferedTimeStart { get; set; }
[Required]
public TimeSpan FirstPreferedTimeEnd { get; set; }
public TimeSpan SecondPreferedTimeStart { get; set; }
public TimeSpan SecondPreferedTimeEnd { get; set; }
#endregion
[Display(Name = "Payment Method")]
[Required]
public PaymentMethods PaymentMethod { get; set; }
[Display(Name = "Order Status")]
public OrderStatus OrderStatus { get; set; }
[Display(Name = "Payment Status")]
public PaymentStatus PaymentStatus { get; set; }
public string Message { get; set; }
public List<OrderPackagesViewModel> OrderPackages { get; set; }
[DataType(DataType.Date)]
public System.DateTime StartDate { get; set; }
[DataType(DataType.Date)]
[Display(Name ="Expected End Date")]
public System.DateTime EndDate { get; set; }
public List<OrderTeamViewModel> OrderTeam { get; set; }
public double TotalAmount { get; set; }
public List<GroupByServices> ServicesPackages { get; set; }
[Remote(action: "CheckPromo", controller: "Promo")]
public string PromoCode { get; set; }
}