asp.net mvc从Html.TextBoxFor()获取值

时间:2013-04-27 19:55:05

标签: javascript asp.net-mvc

我是MVC(Asp.net)和JavaScript的新手。抱歉这个主要问题。

<body>
    <div>
    <%--<% Html.BeginForm(); %>--%>
    <table>
    <tr>
        <td><%:Html.LabelFor(t=> t.CustomerID) %></td>
        <td><%:Html.TextBoxFor(t => t.CustomerID, new { ID = "txtCustomerID" })%></td>
    </tr>
    <tr>
        <td><%:Html.LabelFor(t=> t.CustomerName) %></td>
        <td><%:Html.TextBoxFor(t => t.CustomerName, new { ID = "txtCustomerName" })%></td>
    </tr>
    <tr>
        <td>
            <input type="submit" value="Submit" onclick="CheckName()" />
        </td>
    </tr>
</table>
     <%--<% Html.EndForm(); %>--%>
    </div>
</body>

我需要使用JavaScript获得t.CustomerName值。我尝试如下,它给了我错误。

<head runat="server">
    <script type="text/javascript">
        function CheckName() {
            var value = document.getElementById('<%=t.CustomerName%>').value;
            alert(value);
        }

 function SubmitData() {
        var obj = {};
        obj.CustomerID = $("#txtCustomerID").val();
        obj.CustomerName = $("#txtCustomerName").val();

        $.ajax({
            url: "CreateNewRetailCustomer?jsonObject=" + JSON.stringify(obj),
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (result) {
                if (result.status == "successful") {
                    document.location.href = '../';
                }
            }
        });
    }
    </script>
    <title>Create Wholesale Customer</title>
</head>

我写了我的控制器编码如下:

public ActionResult CreateRetailCustomer()
        {

            return View();
        }

         [HttpPost]
        public ActionResult CreateRetailCustomer(RetailCustomer retCust)
        {            
            new CustomerService.CustomerServiceClient().SaveRetailCustomer(retCust);
            return RedirectToAction("Index");
        }

         [HttpPost]
         public JsonResult CreateRetailCustomer(string jsonObject)
         {
             var retailCustomer = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Models.RetailCustomer>(jsonObject);
             new CustomerService.CustomerServiceClient().SaveRetailCustomer(retailCustomer);
             return Json(new { status = "successful" }, JsonRequestBehavior.AllowGet);             
         }


        [HttpGet]
        public JsonResult GetCustomerList()
        {
            var custlist = new CustomerService.CustomerServiceClient().GetCustomer().Select(m => new { CustomerId = m.CustomerId, CustomerName = m.CustomerName});
            return Json(custlist, JsonRequestBehavior.AllowGet);
        }

错误:

  

编译所需资源时发生错误   服务这个请求。请查看以下特定错误   详细说明并适当修改源代码。

我搜索过,我在这里找到了类似的问题asp.net mvc get value from Html.textbox()。但它没有讨论如何从Html.TextBoxFor获取价值,所以我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

var value = document.getElementById('<%=t.CustomerName%>').value;

此行导致错误。 ASP.NET MVC不像Web窗体那样生成随机客户端ID。它们将是模型中的相同属性名称。这条线是你要找的:

var value = document.getElementById('CustomerName').value;

此外,像TextBoxFor()这样的HTML帮助程序也会将一些代理作为参数。您尝试使用的t变量在lambda表达式的上下文中是有意义的(创建delagates和表达式的简短方法)。如果要访问模型属性,请使用Model变量。

答案 1 :(得分:4)

获取ID的一种简洁方法是使用IdFor()。这允许解析分层ID,并避免将属性的字符串名称硬编码到代码中。

function CheckName() {
    var value = document.getElementById('<%:Html.IdFor(t => t.CustomerName) %>').value;
    alert(value);
}