Отображение данных из запроса с использованием выпадающего списка выбора MVC - PullRequest
0 голосов
/ 30 октября 2018

Я как бы потерялся в части кодирования этой проблемы. У меня есть приложение MVC, и я пытаюсь заполнить запрос Где предложением в качестве выбранного значения из раскрывающегося списка. Кроме того, я заполняю раскрывающийся список из запроса в базе данных. Например:

SELECT db.ID FROM Database db where ID = 1232

Вместо этого я хочу сделать что-то вроде этого ...

SELECT db.ID FROM Database db where ID = "SelectedValue from Dropdownlist"

Модель класса:

public string ID {get; set;}

public string Summary{get; set;}

public int Estimate {get; set;}

public List<Hello> getIDs()
        {
            var que = (from wre in db.Table
                       select new Hello{
                       ID = wre.ID
                       }).toList();
        }

Класс контроллера:

public ActionResult Index(string? IDParam)
    {
        var model = test.getStuff();
        var que = (from wre in db.View
                   where wre.ID == IDParam //Operator '==' cannot be applied to operands of type 'string' and 'string?'

                   select new Hello
                   {
                       ID = wre.ID
                       Summary = wre.Summary,
                       Estimate = wre.Estimate
                   }).toList();

if (IDParam!= null & IDParam.HasValue)
       {
           model = model.Where(x => x.ID == IDParam); //Operator '==' cannot be applied to operands of type 'string' and 'string?'
       }
 return View(model);
    }

Просмотр класса:

 @Html.DropDownList("ID", ViewBag.Releases as SelectList, "ID", new {@id="rel" })

<table> 
       <th>@Html.DisplayNameFor(model => model.ID)</th>
       <th>@Html.DisplayNameFor(model => model.Summary)</th>
       <th>@Html.DisplayNameFor(model => model.Estimate)</th>
</table>

<script>
 $("#rel").change(function () {
    var selectedId = this.val();
location.href = '@Url.Action("Index", "SampleController", new {selectedId="_selectedId"})'.Replace("_selectedId",selectedId);
            });
</script>

Это прекрасно работает, но теперь я теряюсь в аспекте кодирования. Я вижу предупреждение каждый раз, когда меняю идентификатор из выпадающего списка. Тем не менее, нет никаких изменений в отображаемых данных (я знаю, что мне не хватает много). Если кто-нибудь может помочь мне здесь, это было бы здорово, спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

1 - Вам нужно изменить идентификатор, как показано ниже:

$("#rel").change(function () {
              // alert("Changed");
var selectedId =this.value;
        });

2- Если вы хотите перезагрузить страницу, вам нужно установить parametre на [HttpGet] Метод:

    public ActionResult Index(int? selectedId) // selectedId
        {
            var que = (from wre in db.View
                       select new Hello
                       {
                           ID = IDParam
                           Summary = wre.Summary,
                           Estimate = wre.Estimate
                       }).toList();

     ViewBag.Releases = new SelectList(test.getIDs(), "", "ID");
var model = test.getStuff();
if(selectedId!=null && selectedId.HasValue)
{
   // do some stuff with your selectedId
   // if working method is test.getStuff(), then maybe you can use like code below:
model = model.Where(x=> x.Id==selectedId);

}
     return View(model);
        }

и в вашем представлении:

  $("#rel").change(function () {
                      // alert("Changed");
        var selectedId =this.value;
    location.href = '@Url.Action("Index", "YourController", new {selectedId="_selectedId"})'.Replace("_selectedId",selectedId);
                });

3 - Если вы не хотите перезагружать страницу, вам нужно использовать запрос Ajax. Необходимо создать новый метод для получения данных по selectedId,

// Ваш взгляд.

   $("#rel").change(function () {
                  // alert("Changed");
    var selectedId =this.value;
$.ajax({
  method: "POST",
  url: "'@Url.Action("GetDataBySelectedId","YourController")'",
  data: { selectedId: selectedId }
})
  .done(function( data) {
// Delete your table, and fill table with your data with jquery. 
  });
});

// ваш контроллер:

[HttpPost]
public JsonResult GetDataBySelectedId(int? selectedId)
{
// Do some stuff for get your data.
var data = yourData.Where(x=> x.Id = selectedId.Value);
return Json(data);
}
0 голосов
/ 30 октября 2018

1) Попробуйте добавить предложение where в Linq

where wre.ID == IDParam

2) Измените que на экземпляр вашего класса и получите firstOrDefault вместо List

3) Попробуйте передать экземпляр вашего класса как видимую модель

return View(test);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...