c#-要查看的绑定模型问题

尝试将模型绑定到视图时,出现404错误.该ActionResult称为“ SortDesc”,但该视图只是一个标准的“ Index”视图.我知道这没有加载,因为现在有一个名为“ SortDesc”的视图.但是,我有两个按钮,一个用于对数据升序排序,另一个用于对数据降序排序,因此这两个函数是分开的.我只是不确定什么是最好的解决方案,要么继续两个独立的功能,然后以某种方式传递正确的视图以进行加载,要么在Index上创建一个新的单个HttpPost函数,它将知道单击了哪个按钮然后进行相应的排序.这是我到目前为止的代码:

楷模:

public class NumberSetList
{
    public int NumberSetListId { get; set; }
    public List<NumberList> Numbers { get; set; }

    public string SortOrder { get; set; }
}

public class NumberList
{
    public int NumberListId { get; set; } 
    public int Number1 { get; set; }
    public int Number2 { get; set; }
    public int Number3 { get; set; }
    public int Number4 { get; set; }
    public int Number5 { get; set; }
    public string SortOrder { get; set; }
}

剃刀:

@{
    ViewBag.Title = "csi media web test";
}

<div class="jumbotron">
    <h1>csi media web test</h1>
    <p class="lead">Liane Stevenson</p>
</div>

<div class="row">
    <div class="col-md-12">
        <div class="panel panel-info">
            <div class="panel-heading"><i class="glyphicon glyphicon-arrow-right"></i> Enter Your Four Numbers</div>
            <div class="panel-body">
                <form class="form-inline">
                    <div class="col-md-9">
                        <div class="form-group">
                            <label class="sr-only" for="number1">1st Number</label>
                            <input type="number" class="form-control" id="number1" name="Number1" placeholder="#1">
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="number2">2nd Number</label>
                            <input type="number" class="form-control" id="number2" name="Number2" placeholder="#2">
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="number3">3rd Number</label>
                            <input type="number" class="form-control" id="number3" name="Number3" placeholder="#3">
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="number4">4th Number</label>
                            <input type="number" class="form-control" id="number4" name="Number4" placeholder="#4">
                        </div>
                    </div>
                    <div class="col-md-3 text-right">
                        <a class="btn btn-default" href="@Url.Action("SortDesc", "Home")"><i class="glyphicon glyphicon-arrow-down"></i> Sort Desc</a>
                        <a class="btn btn-default" href="@Url.Action("SortAsc", "Home")"><i class="glyphicon glyphicon-arrow-down"></i> Sort Asc</a>
                    </div>
                </form>
                <p>
                    @if (Model != null)
                    {
                        foreach (int number in Model.Numbers)
                        {
                            <span class="label label-info">@number</span>
                        }
                    }   
                </p>
            </div>
        </div>
    </div>
</div>

家庭控制器:

public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult SortDesc([Bind(Include = "Number1, Number2, Number3, Number4")] NumberSetList model)
{

    if (!ModelState.IsValid)
    {
        return View();
    }
    else
    {
        NumberSetList list = new NumberSetList();
        List<int> numbers = new List<int>();
        numbers.Add(model.Number1);
        numbers.Add(model.Number2);
        numbers.Add(model.Number3);
        numbers.Add(model.Number4);
        numbers.OrderByDescending(i => i);
        list.SortOrder = "Desc";
        return View(list);
    }

}

解决方法:

尝试这个

public class NumberSetList {
    public int NumberSetListId { get; set; }
    public List<NumberSetItem> Numbers { get; set; }
    public string SortOrder { get; set; }
}

public class NumberSetItem {
    public int Value { get; set; }
}

,使用for循环为数字创建输入

 @using (Html.BeginForm()) {
    <div class="col-md-9">
        <div class="form-group">
            @if (Model != null && Model.Numbers != null) {
                @for (int i = 0; i < Model.Numbers.Count; i++) {
                    <div class="form-group">
                        @Html.LabelFor(m => m.Numbers[i].Value, "Number " + (i+1).ToString())
                        @Html.TextBoxFor(m => m.Numbers[i].Value, new { @class = "form-control" })
                    </div>
                }
               <div class="col-md-3 text-right">
                   <input id="SortOrder" value="Desc" type="button" class="btn btn-default"><i class="glyphicon glyphicon-arrow-down"></i> Sort Desc</input>
                   <input id="SortOrder" value="Asc" type="button" class="btn btn-default"><i class="glyphicon glyphicon-arrow-down"></i> Sort Asc</input>
               </div>
            }
        </div>
    </div>
}

并在视图中

[HttpPost]
public ActionResult Index(NumberSetList model) {
    if (!ModelState.IsValid) {
        return View();
    } else {
        var numbers = model.SortOrder == "Desc" ?
            model.Numbers.OrderByDescending(n => n.Value) : 
            model.Numbers.OrderBy(n => n.Value);
        model.Numbers = numbers.ToList();
        return View(model);
    }
}
上一篇:[AspNetCore 3.0 ] Blazor 服务端组件 Render, RenderFragment ,RenderTreeBuilder, CascadingValue/CascadingP


下一篇:在Razor标记内写入文本