2015-01-16 3 views
0

Ну, я хочу передать два параметра, используя JSON в контроллер, где я использую запрос, чтобы получить результат ....ASP.NET MVC два параметра Issue

Теперь мне удается передать один параметр (первый один) но второй раз не будет работать, если я сделал Цена/4 будет работать, но добавление/2 говорит в консоли 404 ...

//Passing ID 4 and ID 3 to HomeController/Price 
$(document).ready(function() { 
    $("#type, #States").change(function() { 
     $.getJSON('/Home/Price/4/2', function (data) { 
      var items = '<option>Select a State</option>'; 
      $.each(data, function (i, state) { 
      items += "<option value='" + state.Value + "'>" + state.Text +"</option>"; 
      }); 
      $("#Price").html(items); 
     }); 
    }); 
}); 

// Главная контроллер Функция

public JsonResult States(int id, int ids) 
    { 
     using (TalyllynContext db = new TalyllynContext()) 
     { 
      var query = from F in db.Fares 
         join p in db.TicketPreferences on 
         F.TicketPreferenceID equals p.ID 
         where F.TicketTypeID == id && 
         F.TicketPreferenceID == ids 
         select p; 

      return Json(new SelectList(query.ToList(), "ID", "Name"), 
      JsonRequestBehavior.AllowGet); 
     } 
    } 

Больше всего позвольте я знаю ....

+0

Показать маршрут –

+0

Вы определили параметр маршрута для '/Главная/Цена/{ID}/{идентификаторы} '? Или вы можете использовать '$ .getJSON ('/ Home/Price', {id: 4, ids: 2}, function ...' –

+0

AHHHH .... Да, но ваше решение помогло работе, как это должно быть, LifeSaver спасибо! –

ответ

1

Вы должны определить такое поведение на маршруте или использовать параметры запроса. Я улучшил код JavaScript с подсказками от Stephen Muecke.

Параметры запроса подход:

$(document).ready(function() { 
    $("#type, #States").change(function() { 
//It's better to use Url.Action helper to construct your urls, 
//So that they always will be in sync with your routes 
     $.getJSON('@Url.Action("Price", "Home", new {id=4, ids=2})', function (data) {    
      var price = $("#Price"); 
      price.append($('<option></option>').val('').text('Select a State')); 
      $.each(data, function (i, state) { 
      price.append($('<option></option>').val(state.value).text(state.text))     
      }); 
     }); 
    }); 
}); 

Или, как заявил Stephen Muecke:

$(document).ready(function() { 
    $("#type, #States").change(function() { 
     $.getJSON('@Url.Action("Price", "Home")', {id: 2, ids: 3}, function (data) { 
      var price = $("#Price"); 
      price.append($('<option></option>').val('').text('Select a State')); 
      $.each(data, function (i, state) { 
      price.append($('<option></option>').val(state.value).text(state.text))     
      }); 
     }); 
    }); 
}); 

Маршрут подход:

routed.MapRoute("Name", "{controller}/{action}/{id}/{ids}", 
new {controller = "Home", action = "Index", ids=UrlParameter.Optional}); 
+0

Мало других вещей, которые следует обратить внимание: не печатайте URL-адрес, используйте' '@ Url.Action (« Цена »,« Главная »). Параметр «пустой» нуждается в значении, иначе он вернет «Выберите состояние», поэтому используйте «<значение параметра». Выберите состояние 'или лучше' $ ('# Price'). Append ($ (''). .val (''). text ('Select a State')); 'и, наконец, вы, вероятно, хотите' $ ('# Price'). empty(); 'перед вызовом ajax. –

+0

Согласитесь со своими точками. Хотя, если этот код находится в js-файле, 'Url.Action' не будет работать. –

+0

В этом случае вы передаете его в качестве параметра функции –