Свойство частичного просмотра установлено неправильно при вызове с помощью ajax

#c# #ajax #asp.net-mvc #partial-views

#c# #ajax #asp.net-mvc #частичные представления

Вопрос:

Я создал BaseView-класс, от которого наследуются все мои представления. Это содержит свойство Language . Язык корректно изменяется во всех «обычных» представлениях.

 public abstract class BaseView<TModel> : WebViewPage<TModel>
{
    string _language = TextRepository.DEFAULT_LANGUAGE;

    public string Language { get { return _language; } }

    public BaseView()
        : base()
    {

    }

    protected override void InitializePage()
    {
        base.InitializePage();

        _language = Url.RequestContext.RouteData.Values["lang"] != null ? (string)Url.RequestContext.RouteData.Values["lang"] : _language;
    }
}

public abstract class BaseView : BaseView<dynamic>
{
}
  

В одном из моих представлений я вызываю CandidatePartialRow с помощью ajax, чтобы добавить еще одну частичную строку:

 $("#addAnother").click(function () {
    $.get('/MyController/CandidatePartialRow', function (template) {
        $("#candidateEditor").append(template);
        let target = $('#candidateEditor').children().last();

        $('html, body').animate({
            scrollTop: target.find('span').first().offset().top - 15
        }, 1000);
    });
});
  
 public ActionResult CandidatePartialRow()
{
    var view = PartialView("EditorTemplates/MyPartialView");
    
    return view;
}
  

вызов и добавление работают отлично.

Поэтому я меняю язык с «DE» (который также используется по умолчанию) на «FR». В «обычном» представлении язык изменен. Когда я нажимаю кнопку «добавить» для добавления частичного представления, добавляется частичное представление, но с языком по умолчанию («DE»).

Есть идеи, в чем здесь проблема? Или как я могу изменить язык? (Я также получил язык в контроллере — но это также язык по умолчанию, иначе я мог бы установить его в CandidatePartialRow -методе. Но я не знаю как ..)

Ответ №1:

Хорошо, простое решение… Язык не был добавлен к URL, и поэтому язык по умолчанию всегда задавался с маршрутизацией. Вместо '/MyController/CandidatePartialRow' я должен был использовать

 $.get('@Url.Action("CandidatePartialRow", "MyController")', function (template) {...})