Asp.net MVC 中的重载索引操作

Posted

技术标签:

【中文标题】Asp.net MVC 中的重载索引操作【英文标题】:overload index action in Asp.net MVC 【发布时间】:2017-11-02 10:37:57 【问题描述】:

我正在开发一个多语言网站,我需要先设置语言,然后使用资源文件以该语言显示页面。

我使用了两个这样的索引操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;
using System.Globalization;
using global_vrf.GeoIpService;

 namespace global_vrf.Controllers
  
    public class HomeController : Controller
    
       public ActionResult Index(string language)
    


        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

        return View();
    

    public ActionResult Index() 
    
        string language="en-us";

        return View(language);


    


  

但是当我运行页面时,我有这个错误:

当前对控制器类型的操作“索引”请求 'HomeController' 在以下操作方法之间不明确: System.Web.Mvc.ActionResult Index(System.String) 类型 global_vrf.Controllers.HomeController System.Web.Mvc.ActionResult 类型 global_vrf.Controllers.HomeController 上的 Index()

【问题讨论】:

发生这种情况是因为您有相同的名称操作方法。为避免这种情况,您必须在每个方法之前使用 [HTTPGet] 和 [HTTPPost]。 删除第二种方法。第一种方法,如果language的值为null,则设置为"en-us" @StephenMuecketthank you so much, teo van kot 提出了同样的建议,效果很好 【参考方案1】:

只做一种方法:

 namespace global_vrf.Controllers
 
    public class HomeController : Controller
    
       public ActionResult Index(string language)
       
          if(String.IsNullOrWhiteSpace(language))
          
             string language="en-us";
          
          Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
          Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

          return View();
       
    
 

您不能创建 2 个方法,因为 string 可能为空。

【讨论】:

感谢好主意,我正在努力,如果可行,我会告诉你【参考方案2】:
[HttpPost]
public ActionResult Index(string language)

    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

    return View();


[HttpGet]
    public ActionResult Index() 
    
        string language="en-us";

        return View(language);


    

【讨论】:

感谢您的关心,错误更改为The view 'en-us' or its master was not found 我想我也需要在此行中进行一些更改return View(language); 在您看来,您必须使用@model 字符串作为第一行。我想你已经有观点了 是的,我有一个简单的视图,上面没有什么重要的,没有区别,我的意思是我需要这样的东西return RedirectToAction("Index", "Home", new language = language );

以上是关于Asp.net MVC 中的重载索引操作的主要内容,如果未能解决你的问题,请参考以下文章

新手轻松学会MVC

ASP.NET MVC:删除操作后,索引未呈现

是否可以在 ASP.NET MVC 的脚本块中引用 ViewData?

带有 ASP.NET MVC 的 jquery - 调用启用 ajax 的 Web 服务

在 ASP.NET MVC 3 中为控制器设置默认操作(而不是索引)

在VS2010 ASP.NET开发服务器上运行新的MVC3解决方案;会员数据库在哪里?