невозможно отображать детали в сетке с помощью MVC

где у меня есть одно текстовое поле и кнопка, и когда пользователь ввел значение и нажал кнопку отправки, эти значения мне нужно показать в сетке пользовательского интерфейса Kendo в том же представлении.

для этого я сделал так .....

это моя модель..

namespace KendoSampleMVCApp.Models
{
    public class TextBoxGrid
    {
        public string EnteredValue { get; set; }    
        public List<EmployeeDetails> employees;    
    }
    public class EmployeeDetails
    {
        public string EmployeeId { get; set; }
        public string ManagerId { get; set; }    
    }
}

а это мой контроллер

namespace KendoSampleMVCApp.Controllers
{
    public class EnterValuesGridController : Controller
    {     
        public ActionResult Index( TextBoxGrid model)
        {
            return View(GetEmployee());
        }
        [HttpPost]
        public ActionResult PostValues(TextBoxGrid model)
        {
            TempData["enteringValue"] = model.EnteredValue;
            return View(model);                
        }    
        public  IEnumerable<EmployeeDetails> GetEmployee()
        {
            string enteredValueId =(string) TempData["enteringValue"];
            string managerId = "M" +enteredValueId;
            List<EmployeeDetails> empdtls = new List<EmployeeDetails>();
            EmployeeDetails em1 = new EmployeeDetails();
            em1.EmployeeId = enteredValueId;
            em1.ManagerId = managerId;
            empdtls.Add(em1);
            return empdtls;
        }    
        public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request)
        {
            return Json(GetOrders().ToDataSourceResult(request));
        }    
        private  IEnumerable<EmployeeDetails> GetOrders()
        {
            return GetEmployee();
        }   
    }
}

и это мой взгляд

@model KendoSampleMVCApp.Models.TextBoxGrid
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("PostValues","EnterValuesGrid",FormMethod.Post))
{ 
     <div>
   <fieldset>
        <legend>Enter Textbox Value</legend>

        <div class="editor-field">
            @Html.TextBoxFor(m=>m.EnteredValue) 
        </div>
        <p>           
            <input type="submit" name="Submitbutton1" value="Submit1" />                     
        </p>
    </fieldset>
  </div>
}    
@model IEnumerable<KendoSampleMVCApp.Models.EmployeeDetails> <-----  error at this line    
<h2>Index</h2>
@using (Html.BeginForm())
{ 
    @(Html.Kendo().Grid<KendoSampleMVCApp.Models.EmployeeDetails>()    
    .Name("grid")
    .Columns(columns => {
        columns.Bound(p => p.EmployeeId).Filterable(false).Width(100);
        columns.Bound(p => p.ManagerId).Filterable(false).Width(100);        
    })
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .HtmlAttributes(new { style = "height:430px;" })
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .Read(read => read.Action("Orders_Read", "EnterValuesGrid"))
     )
  )
}

Я получаю сообщение об ошибке в этой строке @model IEnumerable<KendoSampleMVCApp.Models.EmployeeDetails>, говорящее, что

Сообщение об ошибке синтаксического анализатора: в файле разрешен только один оператор модели.

кто-нибудь, пожалуйста, предложите какие-нибудь идеи, почему я получаю эту ошибку ... не могу ли я использовать две модели в одном представлении ....

огромное спасибо ...

EDIT: могу ли я сделать это в моей модели...

 public class ParentViewModel
 { 
      public EmployeeDetails EmployeeDetails { get; set; }
       public TextBoxGrid TextBoxGrid { get; set; }
 }

person Enigma State    schedule 01.08.2013    source источник
comment
кто-нибудь знает, как получить доступ к тем, кто находится в поле зрения.   -  person Enigma State    schedule 01.08.2013


Ответы (1)


Ответ — нет, вы не можете использовать две модели в одном представлении. И нет причин, по которым вам это нужно. Вся суть модели представления заключается в том, что она предназначена для хранения всех данных представления, которому она соответствует.

Создайте класс EnterValuesViewModel и создайте его экземпляр со всеми необходимыми данными от обоих ваших бизнес-объектов. Затем введите свой взгляд на этот класс.

public class EnterValuesViewModel
{
    public string EnteredValue { get; set; }
    public List<EmployeeDetailsViewModel> Employees { get; set; }
}

public class EmployeeDetailsViewModel
{
    public string EmployeeId { get; set; }
    public string ManagerId { get; set; }
}

Вид:

@model EnterValuesViewModel

@Html.TextBoxFor(m=>m.EnteredValue)

@foreach(EmployeeDetailsViewModel emp in Model.Employees)
{
    @* Stuff about each employee goes here *@
}

В качестве альтернативы посмотрите partial просмотры.

person Ant P    schedule 01.08.2013
comment
Пожалуйста, посмотрите на мое редактирование. Если мне это нравится в моей модели, как я могу получить доступ к этим, на мой взгляд... - person Enigma State; 01.08.2013
comment
извините, мне нужно получить доступ к ienumerable элементам из этой модели EmployeeDetailsViewModel, поэтому я упомянул об этом IEnumerable<KendoSampleMVCApp.Models.EmployeeDetails> мне нужно что-то изменить в этой строке - person Enigma State; 01.08.2013
comment
могу ли я удалить эту строку в представлении IEnumerable<KendoSampleMVCApp.Models.EmployeeDetails> - person Enigma State; 01.08.2013
comment
Вам не нужно (и нельзя) привязывать свое представление дважды. Используйте 1_. Если вы хотите, вы можете создать частичное представление, строго введите его в EmployeeDetailsViewModel. и вызовите это из вашего основного представления. Похоже, вам нужно следовать некоторым учебникам. - person Ant P; 01.08.2013