簡體   English   中英

在不同的控制器和視圖之間重用部分視圖(ascx)

[英]Re-using a partial view (ascx) across different Controllers and Views

假設我有2個控制器, TopicsControllerPostsController

對於每個控制器,我有幾個視圖(索引和詳細信息)。

主題(索引)視圖繼承System.Web.Mvc.ViewPage<IEnumerable<MessageBoard.Models.Topic>>

主題(詳細信息)視圖繼承System.Web.Mvc.ViewPage<MessageBoard.Models.TopicFormViewModel>
我使用的是TopicFormViewModel,因為我將與模型一起發送其他數據。

Post(詳細信息)視圖僅繼承System.Web.Mvc.ViewPage<MessageBoard.Models.Post>

現在,我創建了一個局部視圖(CreatePost.ascx) ,該視圖顯然是:p)用於創建一個新的Post。 我希望能夠在上面看到的所有視圖上重用此控件。

更新
我嘗試使用<% Html.RenderPartial("New"); %>渲染部分視圖<% Html.RenderPartial("New"); %> <% Html.RenderPartial("New"); %>來自我的Topics / Index.aspx視圖,但這會導致異常

傳遞到字典中的模型項的類型為“ System.Data.Linq.Table`1 [MessageBoard.Models.Topic]”,但是此字典需要模型項為“ MessageBoard.Models.Post”的模型。

現在的問題是我的局部視圖(CreatePost.ascx)接受System.Web.Mvc.ViewUserControl<MessageBoard.Models.Post> ,但我不確定如何從上面的所有視圖中傳遞它。

我也不確定如何將.ascx值提交到某個URL(即/ Topics / 1 / CreatePost),如何告訴提交按鈕將其發布到該URL?

提前致謝,
馬爾科

Ciao Marko,

現在的問題是我的局部視圖(CreatePost.ascx)接受System.Web.Mvc.ViewUserControl,但我不確定如何從上面的所有視圖中傳遞它。

我不確定我理解“ 如何從上面的所有視圖中傳遞 ”是什么意思,但是我確定您不必從視圖中傳遞Post實例。 這是從您的視圖開始的,您將調用一個控制器操作,該操作創建Post模型對象,然后將其綁定到CreatePost.ascx部分。

我也不確定如何將.ascx值提交到某個URL(即/ Topics / 1 / CreatePost),如何告訴提交按鈕將其發布到該URL?

您有兩種選擇:

在CreatePost.ascx部分內部,您可能正在使用表單。

<% using (Html.BeginForm("action", "controller", FormMethod.Post, new {} )) { %>

如果您以我顯示的方式使用,則可以將第一個和第二個參數分別更改為會妨礙您提交的Action和Controller的名稱。

第二種選擇是使用jQuery。 只需為您的表單設置一個ID,然后

$("#myForm").submit(function(event) {
    //post an ajax request to the server
});

希望這可以幫助!

PS為了能夠重用您的CreatePost.ascx部分,請將其放置在共享視圖文件夾(母版頁所在的位置)內。

關於重用不在同一個視圖文件夾中的局部視圖,請使用以下內容並傳入所需的模型,或者您可以為其定義自定義路線。

<% html.RenderPartial("~/Views/<ControllerName>/<PartialViewName>.ascx", <model>);

@Marko

另一種方法是在PostController中具有如下所示的Action:

[HttpGet]
public ActionResult CreatePost( int topicId ) {
    PostModel pm = _manager.CreateDefaultPost();
    pm.TopicID = id;
    return PartialView( "CreatePost", pm );
}

然后,無論您想在哪里創建帖子,都可以簡單地調用此操作,該操作將為您的新帖子返回強類型視圖。

即使通過網絡IMO進行了補充的http呼叫,此解決方案也具有將新Post的初始化代碼集中在一個位置的優點。

當用戶按下“ New Post”按鈕,然后將接收到的標記注入到模式對話框中或在您喜歡的當前頁面中時,可以從View的“觀點”進行操作的調用。

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM