设计|可维护的条件视图| MVC

时间:2014-11-11 05:40:19

标签: asp.net-mvc

有一个视图,我需要在视图中显示地址详细信息

Name
Street
State , City, Washington

现在,这个地址的顺序对于每个国家都需要有所不同,例如他们想要的格式低于中国

Name
State , City, Washington
Street

所以如果在视图中使用else语句并且具有格式,那么所做的就是写的,之前没有问题,因为这仅适用于一个或两个国家

但现在我看到每个国家都有同样的不同要求,这会让我的观点非常沉重,难以维持

有人可以提供良好的模式以使其更易于维护,例如每个国家/地区都有不同的局部视图并加载部分视图等

2 个答案:

答案 0 :(得分:0)

好的最好的选择是为不同的国家/地区提供不同的视图,并根据某些标识符从控制器返回它们。这样可以保持代码的可维护性。确保不要使用if - else。 如果不是所有字段都是动态排序的,您可以为每个国家/地区创建多个部分视图。在主视图上保持静态视图,在局部视图中保持动态。

现在如果您有太多的国家/地区并且不想维护单个视图,那么另一个选项是创建一个HtmlHelper扩展并使用它在代码中动态创建视图并返回MvcHtmlString,可以在查看如下图所示。

 @Html.CountryFields('us')

编辑:

另请查看以下链接,它可能在您的方案中很有用(使用上述多个视图的好例子)

http://brianreiter.org/2011/03/23/simple-asp-net-mvc-globalization-with-graceful-fallback/

答案 1 :(得分:0)

这里只是一个想法,也许它可以帮助你,希望如此

您可能需要添加新的tables Address(Id,Format)来存储不同的可用格式,并将表AddressFormat(AddressId,CountryId)添加为与Country

的联接表

例如:

Name
Street
State , City, Washington

可以格式化为"{0}<br/>{1}<br/>{2},{3},{4}",Name,Street,State,City,...

和中国为"{0}<br/>{2},{3},{4}<br/>{1}",Name,Street,State,City

所以在表格地址中你将拥有这些数据

Id            Format
1             {0}<br/>{1}<br/>{2},{3},{4}
2             {0}<br/>{2},{3},{4}<br/>{1}

在您的视图中,您可以使用

@Html.Raw(string.Format(Model.Format,Model.Name,Model.Street,Model.State,Model.City,Model.WashingtonField))

所以这里的参数索引是相同的,但想要在显示它们时重新排序

希望这个想法能给你一个提示