Культура набора в приложении MVC ASP.NET

Присоединитесь к таблице цен и выберите запись за последний день:

select pa.partid, pa.Partnumber, max(pr.price)
from myparts pa
inner join myprices pr on pr.partid = pa.partid
where pr.PriceDate = (
    select max(PriceDate) 
    from myprices 
    where partid = pa.partid
)

Максимальное значение () - в случае, если в день существует несколько цен; Я предполагаю, что вы хотели бы показать самый высокий. Если в вашей таблице цен есть столбец идентификаторов, вы можете избежать max () и упростить, например:

select pa.partid, pa.Partnumber, pr.price
from myparts pa
inner join myprices pr on pr.partid = pa.partid
where pr.priceid = (
    select max(priceid)
    from myprices 
    where partid = pa.partid
)

P.S. Вместо этого используйте решение wcm!

82
задан ViVi 16 November 2016 в 05:47
поделиться

3 ответа

Я использую этот метод локализации и добавил параметр маршрута, который устанавливает культуру и язык всякий раз, когда пользователь посещает example.com/xx-xx/[1260ptingExample :

routes.MapRoute("DefaultLocalized",
            "{language}-{culture}/{controller}/{action}/{id}",
            new
            {
                controller = "Home",
                action = "Index",
                id = "",
                language = "nl",
                culture = "NL"
            });

У меня есть фильтр, который выполняет фактическую настройку культуры / языка:

using System.Globalization;
using System.Threading;
using System.Web.Mvc;

public class InternationalizationAttribute : ActionFilterAttribute {

    public override void OnActionExecuting(ActionExecutingContext filterContext) {

        string language = (string)filterContext.RouteData.Values["language"] ?? "nl";
        string culture = (string)filterContext.RouteData.Values["culture"] ?? "NL";

        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));

    }
}

Чтобы активировать атрибут интернационализации, просто добавьте его в свой класс:

[Internationalization]
public class HomeController : Controller {
...

Теперь, когда посетитель переходит на http: // example .com / de-DE / Home / Index отображается немецкий сайт.

Надеюсь, эти ответы укажут вам в правильном направлении.

Я также сделал небольшой пример проекта MVC 5, который вы можете найти здесь

Просто перейдите по адресу http: // {yourhost}: {port} / en-us / home / index, чтобы увидеть текущую дату на английском языке (США), или измените ее на http: // {yourhost} : {port} / de-de / home / index для немецкого языка и т. д.

109
ответ дан 24 November 2019 в 09:09
поделиться

Я бы сделал это в событии Initialize контроллера, как это. ..

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        const string culture = "en-US";
        CultureInfo ci = CultureInfo.GetCultureInfo(culture);

        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }
24
ответ дан 24 November 2019 в 09:09
поделиться

Поскольку это параметр, который сохраняется для каждого пользователя, сеанс является подходящим местом для хранения информации.

Я бы изменил ваш контроллер, чтобы он принимал строку культуры в качестве параметра вместо того, чтобы иметь разные методы действий для каждой потенциальной культуры. Добавить ссылку на страницу очень просто, и вам не нужно постоянно писать один и тот же код каждый раз, когда требуется новая культура.

public class CultureController : Controller    
{
        public ActionResult SetCulture(string culture)
        {
            HttpContext.Session["culture"] = culture
            return RedirectToAction("Index", "Home");
        }        
}

<li><%= Html.ActionLink("French", "SetCulture", new {controller = "Culture", culture = "fr-FR"})%></li>
<li><%= Html.ActionLink("Spanish", "SetCulture", new {controller = "Culture", culture = "es-ES"})%></li>
7
ответ дан 24 November 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: