从视图传递到控制器的参数不起作用

时间:2014-05-01 21:02:31

标签: asp.net-mvc parameter-passing

我有一个非常简单的视图,无法弄清楚为什么我的文本框值没有传递给我的控制器。 actionlink是否可以为控制器提供参数?

@{
ViewBag.Title = "Home Page";
}

@using (Html.BeginForm("LookupEmployee", "Home")) { 
<div class="jumbotron">
<h2>Personnel System</h2><br />
<p>ID: <input type="text" id=employeeID name="employeeID" /></p>
@Html.ActionLink("Your Leave Balance", "LeaveBalance", "Home", null, new { @class = "btn btn-primary btn-large" })
</div>
}

<div class="row">
</div>

我的HomeController获取参数并填充数据集。我对一个值进行了硬编码,并验证了此代码的工作原理:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult LeaveBalance(string employeeID)
    {
        //ViewBag.Message = "Your application description page.";
        if (!String.IsNullOrEmpty(employeeID))
        {
            DataSet gotData;
            LeaveRequestWCF myDataModel = new LeaveRequestWCF();
            gotData = myDataModel.GetTheData(Convert.ToInt32(employeeID));
            myDataModel.theModelSet = gotData;

            return View(myDataModel);
        }
        return View();
    }
}

有什么建议吗?正如您所知,我是MVC的新手,并试图摆脱网络表单。

2 个答案:

答案 0 :(得分:1)

选项1:

您正在使用Html.ActionLink发布表单,由于Html.ActionLinks呈现为Anchor标记,因此无法完成。除非我们显式处理他们的JQuery click事件,否则Anchor标签会产生GET请求。使用“提交”按钮发布表单以执行适当的控制器操作。所以不是 -

  

@ Html.ActionLink(&#34;你的休假余额&#34;,&#34; LeaveBalance&#34;,&#34; Home&#34;,null,   新的{@class =&#34; btn btn-primary btn-large&#34; })

去 -

<input type="submit" class="SomeClass" value="Submit" /> 

选项2:

您还可以使用AJAX POST使用JQuery click事件来发布锚标记以发布表单,一旦获得结果,您就可以进行客户端重定向。

        <script src="~/Scripts/jquery-1.10.2.min.js"></script>
        <script>
        $(document).ready(function() {
            $("#solTitle a").click(function() {
                var data = {
                    "Id": $("#TextId").val()
                };
                $.ajax({
                    type: "POST",
                    url: "http://localhost:23133/api/values",
                    data: JSON.stringify(data),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    processData: true,
                    success: function (data, status, jqXHR) {
                        console.log(data);
                        console.log(status);
                        console.log(jqXHR);
                        alert("success..." + data);
                        // handle redirection here
                    },
                    error: function (xhr) {
                        alert(xhr.responseText);
                    }
                });
             });
         });
        </script>

答案 1 :(得分:0)

ActionLink在页面上创建一个简单的<a href />,它会向服务器发送get请求。

您需要一个提交按钮,因此您的表单会获得表单输入post。使用:

<button type="submit">Your Leave Balance</button>