单击按钮时动作不触发

时间:2016-12-02 12:53:34

标签: c# asp.net-mvc razor

我有一个带有按钮的Razor Index页面,点击它时应该在Home Controller上运行一个动作,但是当我调试家庭控制器时,动作没有触发并且断点没有被击中。

Razor代码是:

@{
    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">
                        <button class="btn btn-default" onclick="location.href='@Url.Action("SortDesc", "Home")'"><i class="glyphicon glyphicon-arrow-down"></i> Sort Desc</button>
                        <button class="btn btn-default" onclick="location.href='@Url.Action("SortAsc", "Home")'"><i class="glyphicon glyphicon-arrow-up"></i> Sort Asc</button>
                    </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 SortDesc (string number1, string number2, string number3, string number4)
        {
            NumberSetList list = new NumberSetList();
            List<int> numbers = new List<int>();
            numbers.Add(Convert.ToInt32(number1));
            numbers.Add(Convert.ToInt32(number2));
            numbers.Add(Convert.ToInt32(number3));
            numbers.Add(Convert.ToInt32(number4));
            numbers.OrderByDescending(i => i);
            list.SortOrder = "Desc";
            return View(list);
        }

当它运行时,它确实将页面的URL更改为:

  

{{3}}

所以它几乎就好像它知道动作在那里以及它需要什么,但它只是没有运行它?

2 个答案:

答案 0 :(得分:1)

此代码是伪代码,未经测试但这应该给你一个想法

将它放在你的模特文件夹

[HttpPost]
public ActionResult SortDesc (myViewModel model)
{

    if(!ModelState.IsValid)
    {
        return View(list)
    }
    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);
    }

}

将您的控制器更改为此类

[HttpPost]

这将告诉您模型是否有效,但我怀疑您的数据是否被传递并读取为整数而不是字符串,因此您可以先尝试更改对象类型然后尝试模型绑定

但是在我的代码审核之后,你可能会在代码块的开头缺少dependencies { compile fileTree(include: '*.jar', dir: 'libs') compile project(':zxing-2.3.0') compile project(':ColorPickerView') compile project(':DropboxChooserSDK') compile project(':PullToRefreshLibrary') compile project(':volley') compile 'com.android.support:recyclerview-v7:24.0.0-alpha2' compile 'com.facebook.android:facebook-android-sdk:4.5.0' compile 'com.google.android.gms:play-services-analytics:8.4.0' compile 'com.google.android.gms:play-services-gcm:8.4.0' compile 'com.android.support:design:23.3.0' compile 'com.github.ctodobom:OpenCV-3.1.0-Android:-SNAPSHOT' } 属性,这意味着它总是一个HttpGet

答案 1 :(得分:1)

您需要的是anchor代码,而不是button。在a标记上添加链接实际上会将浏览器网址更改为其href中指定的值。按钮在哪里什么都不做。要更改URL,您必须添加其他Javascript来处理它。

所以改变这个

<button class="btn btn-default" onclick="location.href='@Url.Action("SortDesc", "Home")'">
 <i class="glyphicon glyphicon-arrow-down"></i> Sort Desc
</button>

<a class="btn btn-default" href="@Url.Action("SortDesc", "Home")">
<i class="glyphicon glyphicon-arrow-down"></i> Sort Desc
</a>

对您的其他button语法也进行相同的更改。