【问题标题】:Sorting by Dropdownlist on asp mvc在asp mvc中按下拉列表排序
【发布时间】:2019-08-03 05:24:49
【问题描述】:

您好,我想使用 viewbag 按 selectedId 类别对索引页进行排序。 我已经在使用 linq 并实现搜索按钮是有效的,但过滤类别不起作用。

控制器上的这个索引方法

public ActionResult Index(string Search, int Ca )
    {
        //var c = User.Identity.GetUserId();

        string c = System.Web.HttpContext.Current.User.Identity.GetUserId();

        //int e =  int.Parse(Request.Form["Ca"].ToString());

        var test = (from s in db.Articles
                    where (s.UserId == c)
                    where (s.titre.Contains(Search))
                    where (s.Idc == int.Parse (Request["Ca"].ToString()))
                        select s
                       ).Distinct().ToList();
            ViewBag.Ca = new SelectList(db.Categories, "Id", "libelle");
            return View(test.ToList());          
    }

谢谢

【问题讨论】:

  • 你真的不应该使用ViewBag,因为数据是动态的,直到运行时才指定。使调试成为真正的噩梦,您最好实例化一个模型或将其与 MVVM 方法中的另一个模型结合起来。我的两分钱,你也可以简单地使用.OrderBy(category => category.Id)来订购列表。
  • 我想用 jquery 做到这一点,但我不知道如何实现,谢谢
  • 如果你想先用 javascript 来做,你必须在你的视图中将变量保存在一个 javascript 数组中,就像这样
  • 另外,如果您使用 JavaScript,请记住,在 DOM 准备好之前,您将无法为下拉列表添加和排序内容,具体取决于您拥有多少内容。因此,如果其他变量发挥作用,您可能会遇到古怪的用户体验行为,您必须解决这些问题。
  • 一种解决方案是使用JsonResult 作为返回类型的控制器。这样,您可以让服务器返回模型,然后您可以在服务器上抢先订购或一旦您承诺返回。然后将转储添加到输入中,因为您将准备就绪并通过 Ajax 将异步返回到服务器。不熟悉架构,只是一个建议。

标签: c# asp.net-mvc entity-framework filter


【解决方案1】:

要在 jQuery 中实现您的目标,您可以通过以下方式实现。

[ApiController]
[Route("api/ux/input/[controller]")]
public class SelectController : ControllerBase
{
     [HttpGet("samples")]
     public async Task<JsonResult> Get() => new JsonResult(await sampleService.RetrieveSampleEntity());
}

那么在你的视图中你应该有类似这样的代码。

$(document).ready(function() {
     loadAndOrderSampleSelect();
});

function loadAndOrderSampleSelect() {
     axios.get('/api/ux/input/select/samples').then((response) => {
          let samples = sortSelectByCategory(response.data);
          for(var index = 0; index < samples.length; index++) {
               $('#drpSamples').append('<option value="' + samples[index].id + '">' + samples[index].name + '</option>');
          }
     });
}

function sortSelectByCategory(items) {
     return items.sort(function(a, b) {
           return (b['category'] > a['category']) ? 1 : ((b['category'] < a['category']) ? -1 : 0);
     });
}

排序可能无法正常工作,我假设您在页面上有一个名为drpSamples 的 id 选择,但这应该为您指明正确的方向,使用 JavaScript 而不是服务器端逻辑。尽管如此,如果你在Get 内的服务器上,你可以简单地做sampleService.RetrieveSamples().OrderBy(c =&gt; c.Category);

【讨论】:

  • 感谢 greg a 我很欣赏你的回答,但我在我的项目中使用 asp.net mvc 5,不知道如何更新它并添加 api 以使其工作
  • @mor Web Api 和 MVC 几乎相同,区别主要在于路由,MVC 中有视图引擎。这就是它们在 Core 中被合并的原因。
  • 如果您稍微研究一下 MVC,我的回答会回答您的问题。
猜你喜欢
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多