亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有null模型的renderpartial傳遞了錯誤的類型

具有null模型的renderpartial傳遞了錯誤的類型

慕田峪7331174 2019-12-12 14:39:07
我有一個頁面:<%@ Page Inherits="System.Web.Mvc.View<DTOSearchResults>" %>并在其上執行以下操作:<% Html.RenderPartial("TaskList", Model.Tasks); %>這是DTO對象:public class DTOSearchResults{    public string SearchTerm { get; set; }    public IEnumerable<Task> Tasks { get; set; }這是部分的:<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Task>>" %>如果Model.Tasks不為null,則一切正常。但是,當它為null時,我得到:傳遞到字典中的模型項的類型為'DTOSearchResults',但此字典需要模型類型為'System.Collections.Generic.IEnumerable'1 [Task]'的模型項。我認為它一定不知道要使用哪個重載,因此我明確地做到了這一點(見下文),但是仍然遇到相同的問題!<% Html.RenderPartial("TaskList", (object)Model.Tasks, null); %>我知道我可以通過檢查null甚至不傳遞null來解決此問題,但這不是重點。為什么會這樣呢?
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

Andrew,我認為您遇到的問題是RenderPartial方法的結果,該方法使用的是在您傳遞的模型為null時對部分視圖進行調用(視圖)的模型。通過執行以下操作,可以解決這種奇怪的行為:


<% Html.RenderPartial("TaskList", Model.Tasks, new ViewDataDictionary()); %>

有幫助嗎?


查看完整回答
反對 回復 2019-12-12
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

稍微短一點的答案是


<% Html.RenderPartial("TaskList", new ViewDataDictionary(Model.Tasks)); %>

之所以可行,ViewDataDictionary是因為它擁有模型,并且可以接受模型作為構造函數參數。這基本上通過了“整個”視圖數據字典,該字典當然僅包含可能為空的模型


查看完整回答
反對 回復 2019-12-12
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

一個解決方案是創建一個像這樣的HtmlHelper:


public static MvcHtmlString Partial<T>(this HtmlHelper htmlHelper, string partialViewName, T model)

{

    ViewDataDictionary viewData = new ViewDataDictionary(htmlHelper.ViewData)

    {

        Model = model

    };

    return PartialExtensions.Partial(htmlHelper, partialViewName, model, viewData);

}

在Partial<T>(...)之前的匹配Partial(...),從而方便編譯時沒有歧義錯誤。


我個人覺得很難理解行為-很難想象這是設計選擇嗎?


查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關注
  • 402 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號