我在asp net mvc 5应用程序中遇到了验证消息本地化的问题.
我用它进行本地化:
路线配置:
[Internationalization]
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("DefaultLocalized",
"{language}-{culture}/{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = "",
language = "de",
culture = "DE"
});
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
LocalizationAttribute:
class InternationalizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string language = (string)filterContext.RouteData.Values["language"] ?? "de";
string culture = …Run Code Online (Sandbox Code Playgroud) 是否可以通过Http-POST将强类型视图中的对象发送到Controller,该Http-POST不等于原始模型的类型.
例如:
我有一个像这样的ViewModel:
public class PersonsViewModel
{
List<PersonViewModel> persons { get; set; }
PersonsViewModel() { }
}
public class PersonViewModel
{
//some properties
Person() { }
}
Run Code Online (Sandbox Code Playgroud)
现在我有了这个观点:
@model PersonsViewModel
<div>
@for(int i = 0; i > Model.persons.Count; i++)
{
@Html.EditorFor(Model.persons[i])
}
</div>
Run Code Online (Sandbox Code Playgroud)
编辑器看起来像这样:
@model PersonViewModel
<div>
@using (Html.Beginform("Postaction","Controller", FormMethod.Post)){
<div>
<!-- properties and textboxes here + submit button -->
</div>
}
<div>
Run Code Online (Sandbox Code Playgroud)
控制器动作
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Postaction(PersonViewModel model)
{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为看起来Controller似乎期待一个PersonsViewModel对象.到目前为止,我的解决方法是创建一个包含所有PersonViewModel的"大"表单,并将完整的PersonsViewModel发送到控制器.
虽然视图是强类型的,但它是否有可能只将一个PersonViewModel传递给Controller?
亲切的问候,马丁