ASP.NET MVC部分视图与不同的模型

时间:2010-09-22 09:18:23

标签: c# asp.net-mvc partial-views

在我的索引视图中,我有通常的编辑,详细信息和删除链接。我为他们制作了图标,因为我在任何地方都使用它们,所以我将它们放在部分视图中。

现在,我没有感觉我在这里做得最好。所以我的问题是:如何优化它,或者最佳实践应该有什么不同。

部分视图:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MVC2_NASTEST.Models.ButtonDetail>" %>
<%if (Model.edit) { %>
<a href='<%= Url.Action("Edit", Model.RouteValues) %>'>
    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" /></a>
<%} if (Model.details) { %>
<a href='<%= Url.Action("Details",Model.RouteValues) %>'>
    <img src="<%= Url.Content("~/img/application_view_detail.png") %>" alt="Details" width="16" /></a>
<%} if (Model.delete) { %>
<a class="delbtn" href='<%= Url.Action("Delete",Model.RouteValues) %>'>
    <img src="<%= Url.Content("~/img/cancel.png") %>" alt="Delete" width="16" /></a>
<%} %>

ViewModel:

using System;
namespace MVC2_NASTEST.Models {

    public partial class ButtonDetail {
        public object RouteValues { get; set; }
        public bool edit { get; set; }
        public bool details { get; set; }
        public bool delete { get; set; }
    }
}

可以或者应该将视图模型放在Models名称空间中吗?或者将它们放在不同的命名空间中?什么是最佳做法?

索引视图:

    <% foreach (var item in Model) { %>
    <tr>
        <td>
            <% Html.RenderPartial("buttons", new MVC2_NASTEST.Models.ButtonDetail() { RouteValues = new { id = item.hlpb_ID, test = item.hlpb_Ontvanger }, edit = true, details = true, delete = true }); %>
        </td>
        <td>
            <%: item.hlpb_Titel %>
        </td>
        <td>
            <%: item.hlpb_Schooljaar %>
        </td>
        <td>
           ...
        </td>
    </tr>
    <% } %>

特别是索引视图中的部分看起来并不是我眼中的最佳实践。

2 个答案:

答案 0 :(得分:2)

  

viewmodel可以或应该在Models名称空间中吗?

要将它们与模型分开,您可以将它们放在ViewModels命名空间中。就索引视图而言,您可以使用Editor/Display templates

答案 1 :(得分:2)

我觉得这部分对你没有帮助。

<a href='<%= Url.Action("Edit") %>'>
    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" /></a>

不是那么糟糕

<% Html.RenderPartial("buttonEdit"); %>

即使您发现所有按钮都应该共享相同的样式,我也会在这里使用css。

作为旁注,不要使用get来执行删除操作。搜索抓取工具可能会在扫描您的网站时删除所有条目。即使它是一个内部网站也不是一个好主意。使用帖子。