假设我有2个控制器,TopicsController和PostsController。

对于每个控制器,我有几个视图(索引和详细信息)。

主题(索引)视图继承System.Web.Mvc.ViewPage<IEnumerable<MessageBoard.Models.Topic>>

主题(详细信息)视图继承System.Web.Mvc.ViewPage<MessageBoard.Models.TopicFormViewModel>
我使用的是TopicFormViewModel,因为我将与模型一起发送其他数据。

“发布(详细信息)”视图仅继承System.Web.Mvc.ViewPage<MessageBoard.Models.Post>

现在,我创建了一个局部视图(CreatePost.ascx),该视图(显然是:p)用于创建一个新的Post。我希望能够在上面看到的所有视图上重用此控件。

更新资料
我尝试使用Topics / Index.aspx视图中的<% Html.RenderPartial("New"); %>渲染部分视图,但这会导致异常


  传递到字典中的模型项的类型为“ System.Data.Linq.Table`1 [MessageBoard.Models.Topic]”,但是此字典需要模型项为“ MessageBoard.Models.Post”的模型。


现在的问题是我的局部视图(CreatePost.ascx)接受System.Web.Mvc.ViewUserControl<MessageBoard.Models.Post>,但我不确定如何从上面的所有视图中传递它。

我也不确定如何将.ascx值提交到某个网址(即/ Topics / 1 / CreatePost),如何告诉提交按钮将该网址发布到该网址?

提前致谢,
马可

最佳答案

Ciao Marko,


  现在的问题是我的部分
  视图(CreatePost.ascx)接受
  System.Web.Mvc.ViewUserControl
  我不确定如何从
  我上面的所有观点。


我不确定我理解“如何从上面的所有视图中传递”是什么意思,但是我确定您不必从视图中传递Post实例。这是从您的视图开始的,您将调用一个控制器操作,该操作创建Post模型对象,然后将其绑定到CreatePost.ascx部分。


  我也不确定如何提交
  .ascx值转换为某个网址(即
  / 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
});


希望这可以帮助!

附言为了能够重用您的CreatePost.ascx部分,请将其放置在共享视图文件夹(母版页所在的位置)内。

关于c# - 在不同的 Controller 和 View 之间重用部分 View (ascx),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4065402/

10-11 02:24