1

これは私のレンダパラです

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<a href='<%= Url.Action("Edit", new {id=Model.ID}) %>'>
                    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" /></a>

私は基本的にこの方法でそれを呼び出したいです:

<% Html.RenderPartial("edit", new { ID = item.hlpb_ID }); %>

ただし、これにより実行時エラーが発生します'object' does not contain a definition for 'ID'

では、その場で作成された名前のないオブジェクト (それが何であるかを推測するため) をレンダーパーシャルに送信するにはどうすればよいですか? このようにUrl.Action

4

2 に答える 2

1

厳密に型指定されたビューを使用する場合にのみ、オブジェクトのメンバーを直接呼び出すことができます。

動的オブジェクトを RenderPartial に渡したい場合、リフレクションまたは dynamic キーワードを使用して、実行時にわからないプロパティにアクセスするのにかなり苦労します。これを行うことは非常に悪い習慣です。一般に、オブジェクトをレンダリングする必要があるため、どのオブジェクトがビューに渡されるかはわかっています。

dynamic キーワード チェックの使用方法の詳細については、次を参照してください。

http://weblogs.asp.net/shijuvarghese/archive/2010/02/03/asp-net-mvc-view-model-object-using-c-4-dynamic-and-expandoobject.aspx

于 2010-09-21T14:10:27.130 に答える
1

それが常にあなたが渡すIDである場合、Nullable<int>代わりに受け入れるように部分ビューを更新してみませんか.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>
<a href='<%= Url.Action("Edit", new {id=Model}) %>'>
    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" />
</a>

次にEdit、コントローラーでのアクションは次のようになります。

public ActionResult Edit(int? id)
{
    if (id.HasValue)
        // do something with id
    else
        // do something when no id supplied
}

動的オブジェクトを渡そうとしても、目的の ID だけであれば無意味に思えます。オブジェクトから使用する必要がある他の情報がある場合は、ViewData代わりにデータを入力してビューに渡すことができるカスタム クラスを検討する必要があります。

于 2010-09-21T14:12:53.150 に答える