0

ViewData.Model を部分ビューに渡す際に問題が発生しました。結果クエリと同一視しても、常にデフォルトで null になります。モデルが null であるため、厳密に型指定されたデータにアクセスできません。私の現在のコードはこれです、

ビューページ

<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>

ユーザーコントロール - テスト

<%@ 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);
        }
4

6 に答える 6

2

コメントで、ビューは強く型付けされていないと言いました。そのための:

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

動作しないでしょう。ビューを testMVCProject.Models.information に強く型付けし、コンストラクターからその型のインスタンスを渡すと、機能します。

コントローラ:

public ActionResult ShowAView()
{
    Return View("WhateverYourViewIsCalled", new information());
}
于 2009-03-12T21:32:08.307 に答える
1

Html.RenderPartialヘルパーの使用について誤解があります。RenderPartialを使用すると、コントローラーにモデルを要求せずにビューが表示されます。

したがって、ViewPageをリファクタリングし、適切なモデルをユーザーコントロールに渡す必要があります。

例:

コントローラ:

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);   
}

コードを表示:

<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>
{
}

これで、ユーザーコントロールでモデルがnullになりません。ただし、ユーザーコントロールのレンダリングがコントローラーでコードを部分的に実行することを忘れないpublic ActionResult header(int id)でください。コントローラーでコードを実行する必要があります。

お役に立てれば。

于 2009-03-12T22:00:29.533 に答える
0

ViewPage もジェネリックにしてみましたか?

于 2009-03-12T00:18:41.793 に答える
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();
        }
    }
于 2012-04-23T20:45:09.733 に答える
0

RenderPartial を実行してもコントローラーは呼び出されません。コントローラーはバイパスされ、ビューは直接レンダリングされます。したがって、モデルとして渡したいものはすべて、呼び出しビューから実行する必要があります。

于 2009-03-12T21:40:45.507 に答える
-1

問題は、「id」という名前のフォーム内の要素が欠落しているため、Action メソッドのパラメーターに値が入力されないことであると思いますか?

そうすれば、クエリは常に FirstOrDefault で null を返すため、null モデルになります。

私の推測ですが...

于 2009-03-12T00:04:59.800 に答える