Невозможно выполнить привязку во время выполнения для пустой ссылки с ViewBag и List - PullRequest
0 голосов
/ 11 января 2019

Кажется, я не могу найти способ обойти это, и я думаю, что я просто выбрал неправильный подход, но каким будет правильный?

У моего контроллера есть такой метод:

        public List<System.Web.Mvc.SelectListItem> GetSupplierAvg(string cityname, string actualproduct)
    {
        var gsa = db.Database.SqlQuery<string>("select distinct SupplierAvg from OPIS_Price_import where City=@cn and ActualProduct=@ap", 
            new SqlParameter("@cn", cityname), new SqlParameter("@ap", actualproduct));
        var SupplierAvgList = new List<SelectListItem>();
        foreach (var thing in gsa)
        {
            SupplierAvgList.Add(new SelectListItem { Text = thing, Selected = false, Value = thing });
        }

        ViewBag.SupplierAvgList = SupplierAvgList;
        return ViewBag.SupplierAvgList;
    }

и мой вид пытается назвать это так:

@Html.DropDownList("SupplierAvgList", (IEnumerable<SelectListItem>)ViewBag.SupplierAvgList(item.CityName,thing))

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

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы должны изменить свой тип возврата из списка на Результат действия и должны вернуть представление.

 public ActionResult GetSupplierAvg(string cityname, string 
 actualproduct)
 {
    var gsa = db.Database.SqlQuery<string>("select distinct SupplierAvg from 
               OPIS_Price_import where City=@cn and ActualProduct=@ap", 
    new SqlParameter("@cn", cityname), new SqlParameter("@ap", actualproduct));
    var SupplierAvgList = new List<SelectListItem>();
    foreach (var thing in gsa)
    {
        SupplierAvgList.Add(new SelectListItem { Text = thing, Selected = false, 
        Value = thing });
    }

    ViewBag.SupplierAvgList = SupplierAvgList;
    return View;
 }

Тогда в HTML следует написать как,

@{
var list = "Select Option";
if(@ViewBag.SupplierAvgList!=null)
{
  list = @ViewBag.SupplierAvgList;
}
}

// Your DropDown code here.
0 голосов
/ 11 января 2019

Я думаю, что это не работает из-за неправильного вызова списка. Вы пытаетесь вызвать SupplierAvgList как метод, но это поле (которое также должно быть проверено, оно не равно нулю). Также предположим, что вы пытаетесь вызвать метод GetSupplierAvg с некоторыми параметрами. Если это так, то вам нужно вызвать его с помощью API или вызвать как другую страницу (связанную с действием GetSupplierAvg), например:

@Html.ActionLink("link text", "GetSupplierAvg", "controllerName", new { cityname = item.CityName, actualproduct = thing  }, null)

ОБНОВЛЕНО

Вы можете попробовать путь ниже. Вызовите метод из вашего представления и передайте это значение в раскрывающийся список:

@{
    var dropDownData = ((YourController)this.ViewContext.Controller).GetSupplierAvg(item.CityName, thing);
}
@Html.DropDownList("SupplierAvgList", dropDownData);

P.S. ASP.Net MVC: вызов метода из представления

...