2016-05-30 2 views
1

У меня есть три комбинированных блока CaseCade, которые отлично работают для меня Проблема начинается, когда я хочу СОХРАНИТЬ идентификатор, который выбран, Я знаю, как получить выбранный идентификатор что будет, как это, и у меня нет проблем с этимРабота с ViewModels в пользовательском интерфейсе Kendo ASP.net MVC

var countries = $("#countries").data("kendoDropDownList") 
countries.value() 

я не знаю, как установить эти значения в моей модели представления, что я определено выше, с моей точки зрения, я не знаю, как к модель просмотра в функцию POST.

This Is My View

@using System.Web.Optimization 
@using Kendo.Mvc.UI 
@model Mfr.Admin.Models.Address.CreateViewModel 
@{ 
    Layout = "~/Views/Shared/_Main.cshtml"; 
} 
< 
<div class="demo-section k-content"> 
<h4>Countries:</h4> 
@(Html.Kendo().DropDownListFor(m=>m.CountryId) 
     .HtmlAttributes(new {style = "width:100%"}) 
     .OptionLabel("Select Country...") 
     .DataTextField("Title") 
     .DataValueField("Id") 
     .DataSource(source => 
     { 
      source.Read(read => 
      { 
       read.Action("GetCascadeCountries", "Address"); 
      }); 
     }) 
    ) 

<h4 style="margin-top: 2em;">states:</h4> 
@(Html.Kendo().DropDownListFor(m=>m.StateId) 
     .HtmlAttributes(new {style = "width:100%"}) 
     .OptionLabel("Select state...") 
     .DataTextField("stateTitle") 
     .DataValueField("stateId") 
     .DataSource(source => 
     { 
      source.Read(read => 
      { 
       read.Action("GetCascadeStates", "Address") 
        .Data("filterStates"); 
      }) 
       .ServerFiltering(true); 
     }) 
     .Enable(false) 
     .AutoBind(false) 
     .CascadeFrom("CountryId") 
    ) 
<script> 
    function filterStates() { 
     return { 
      countries: $("#CountryId").val() 
     }; 
    } 
</script> 

<h4 style="margin-top: 2em;">cities:</h4> 
@(Html.Kendo().DropDownListFor(m=>m.CityId) 
     .HtmlAttributes(new {style = "width:100%"}) 
     .OptionLabel("Select city...") 
     .DataTextField("cityTitle") 
     .DataValueField("cityId") 
     .DataSource(source => 
     { 
      source.Read(read => 
      { 
       read.Action("GetCascadeCities", "Address") 
        .Data("filterCities"); 
      }) 
       .ServerFiltering(true); 

     }) 
     .Enable(false) 
     .AutoBind(false) 
     .CascadeFrom("StateId") 

    ) 
<script> 
    function filterCities() { 
     return { 
      cities: $("#StateId").val() 
     }; 
    } 
</script> 
<button class="k-button k-primary" id="get" style="margin-top: 2em; float:  right;">Save</button> 

</div> 
<script> 

$(document).ready(function() { 

    $("#get").click(function() { 
     // I want To call My post function Here, and pass viewmodel with initialized values to that 
     // I Suppose It will be something like this 
     //but I dont know how to set values to view model 
     //$.ajax({ 
     // url: "@Html.Raw(Url.Action("Create", "Address"))", 
     // type: "POST", 
     // dataType: "json" 
     //)}; 
    }); 
}); 

</script> 
    <style> 
    .k-readonly { 
    color: gray; 
} 

Это Мои сохранить Действие

адрес здесь не инициализируется

 [HttpPost] 
     public ActionResult Create(CreateViewModel address) 
    { 
     if (address == null) 
      throw new ArgumentNullException(nameof(address)); 

     var addressModel = new Address() 
     { 
      Description = address.Description, 
      CityId = address.CityId, 
      StateId = address.StateId, 
      CountryId = address.CountryId, 
      UserApplicationId = User.Identity.GetUserId<int>() 
     }; 

     _addressRepository.Add(addressModel); 
     _addressRepository.Complete(); 

     return Json(""); 

    } 

это вид модели

public class CreateViewModel 
    { 

    public int Id { get; set; } 
    public int UserApplicationId { get; set; } 

    public int CountryId { get; set; } 

    public int StateId { get; set; } 

    public int CityId { get; set; } 
    public string Description { get; set; } 

} 

ответ

0

Вам просто нужно отправить обратно в JSON контроллер

var countries = $("#countries").data("kendoDropDownList") 
var countryId = countries.value(); 
var id = ..... //and so on 

var data = {'Id': id, 'CountryId': countryId, /*ad so on*/ } 

... 
data: JSON.stringify(data) 
... 

собрать все необходимые данные, поместите его в объекте JSON, stringify и если свойства соответствуют JSON правильно моделировать свойства, то он будет автоматически переплетен с параметром контроллеров.

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