0

проблема с передачей ViewData.Model на частичные виды. Он всегда имеет значение null, даже если я приравниваю его к запросу результата. Я не могу получить доступ к строго типизированным данным, потому что модель имеет значение NULL. Мой текущий код этогострого типизированные частичные виды MVC RC1

ViewPage

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <% Html.RenderPartial("header", this.ViewData.Model); %> 
    <% Html.RenderPartial("test", this.ViewData.Model); %> 
    <div id="userControls"> 
    </div> 
</asp:Content> 

UserControl - заголовок

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<testMVCProject.Models.information>" %> 
<h2> 
    ACReport</h2> 
<p> 
    id: 
    <%= Html.Encode(Model.id) %> 
</p> 
<p> 
    type: 
    <%= Html.Encode(Model.type) %> 
</p> 

UserControl - тест

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<testMVCProject.Models.information>" %> 

     <% using (Ajax.BeginForm(
      "pressureV2", 
      "Home", 
      new { id = ViewData.Model.id }, 
      new AjaxOptions 
      { 
       UpdateTargetId = "userControls", 
       HttpMethod = "GET" 

      }, 
      new { @id = "genInfoLinkForm" })) 
      {%> 
     <%= Html.SubmitButton("hey", "Lol") %> 

    <%} %> 

Контроллер

public ActionResult header(int id) 
     { 
      var headerResults = from c in db.information 
           where c.id == id 
           select new information 
           { 
            id = c.id, 
            type = c.type 
           }; 
      ViewData.Model = headerResults.FirstOrDefault(); 
      return View(ViewData.Model); 
     } 

public ActionResult pressureV2(int id) 
     { 
      var pressureVResults = from c in db.pressure_volume_tests 
            where c.id == id 
            select new pressureVT 
            { 
             bottomCVP = c.bottom_CVP, 
             topCVP = c.top_CVP 
            }; 

      ViewData.Model = pressureVResults.FirstOrDefault(); 
      return View(ViewData.Model); 
     } 
+0

ли все представления сильно типизированных к Models.information? Какой элемент управления возвращает ViewPage? – liammclennan

+0

Я не строго набрал только частичные представления. – Ayo

ответ

2

В комментариях вы сказали, что представление не строго типизировано. Из-за этого:

<% Html.RenderPartial("header", this.ViewData.Model); %> 
<% Html.RenderPartial("test", this.ViewData.Model); %> 

не будет работать. Если вы решите ввести свое представление в testMVCProject.Models.information, а затем передайте экземпляр этого типа из своего конструктора, он будет работать.

Контроллер:

public ActionResult ShowAView() 
{ 
    Return View("WhateverYourViewIsCalled", new information()); 
} 
+0

, поскольку я использую частичные части по всему виду, если я хотел добавить новую информацию о запросах в частичные, я ограничена только тем, что передается из самой страницы просмотра, или я могу ограничиться только частью частичного? – Ayo

+0

Частицы могут получать только данные из вида. См. Ответ Джастина. – liammclennan

-1

Я считаю, что проблема может заключаться в том, что вам не хватает элемента в форме с именем «id», поэтому параметр метода Action никогда не заполняется значением?

Таким образом, запрос всегда возвращал значение null с помощью FirstOrDefault, а значит и нулевой модели.

Просто мое предположение ...

0

Вы пробовали сделать ViewPage родовое, а?

0

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

+0

Откуда вы получили эту информацию, я уверен, что могу получить доступ к контроллеру при вызове метода renderpartial – Ayo

+0

Из личного опыта. Когда вы вызываете RenderPartial («viewName»), механизм просмотра не будет пытаться вызвать метод контроллера - он будет искать представление под названием «viewName». Попробуйте это ... Возможно, вы сможете переопределить механизм представления по умолчанию для использования контроллеров ...? – Justin

1

У вас возникло непонимание использования Html.RenderPartial helper. Когда вы используете RenderPartial, вы увидите представление без запроса модели с контроллера.

Таким образом, вы должны реорганизовать ViewPage и пройти хорошую модель для ваших UserControls:

Exemple:

Контроллер:

ActionResult MainView() 
{ 
    var mainviewobj = new MainViewObject(); 

    var headerResults = from c in db.information 
           where c.id == id 
           select new information 
           { 
            id = c.id, 
            type = c.type 
           }; 

    mainviewobj.info = headerResults.FirstOrDefault(); 

    return view(mainviewobj); 
} 

View Code:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <% Html.RenderPartial("header", this.ViewData.Model.info); %> 
    <% Html.RenderPartial("test", this.ViewData.Model.info); %> 
    <div id="userControls"> 
    </div> 
</asp:Content> 

Просмотр Код За

public partial class MainView : ViewPage<MainViewObject> 
{ 
} 

Теперь модель не будет пустым в вашем пользовательском контроле. Но помните UserControl рендеринга частично серовато выполнить код в контроллере Таким образом, вы серовато нужен public ActionResult header(int id) в контроллере

Надеется, что это помогает.

+0

im стараюсь избегать файлов codebehind, и я не уверен, что эта оценка будет работать для динамических перегрузок модели – Ayo

0

Я нашел, что это сработало для меня, ссылаясь на частичное, как вы, так.

...form 
    @Html.Partial("_AboutYou", Model.AboutYou); 
..end form 

в частичном виде в верхней части ...

@model <namespace1>.<namespace2>.<namespace3>.CustomerInfo.AboutYou 
    @{ 

     ViewData.TemplateInfo.HtmlFieldPrefix = "AboutYou"; 

     if (this.ViewContext.FormContext == null) 
     { 
      this.ViewContext.FormContext = new FormContext(); 
     } 
    } 

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

  • Нет связанных вопросов^_^