2013-04-27 80 views
1

我是新来的MVC(Asp.net)以及JavaScript。对于这个主要问题抱歉。asp.net mvc从Html.TextBoxFor()获取值

<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); 
     } 

错误:

An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

我搜索,我发现类似的问题asp.net mvc get value from Html.textbox()这里。但它没有讨论如何从Html.TextBoxFor获得价值,所以我该如何做到这一点?

+0

http://tilr.blogspot.com/2013/04/read-and-write-data-in-mvc-using-n-tier.html – DevT 2013-04-28 22:10:46

回答

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

此行发生错误。 ASP.NET MVC不会像Web窗体中那样生成随机客户端ID。他们将是您的模型中相同的属性名称。这条线是你在找什么:

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

而且HTML佣工像TextBoxFor()采取一些代表作为参数。 t您正尝试使用的变量在lambda表达式的上下文中是很有意义的(一种简短的方式来创建感应器和表达式)。如果您想要访问模型属性,请使用Model变量。

+0

这里没有错误。但不弹出/显示警报。这是为什么? – DevT 2013-04-27 20:10:02

4

一个干净的方式来获得该ID是使用IdFor()。这允许分层ID被解析,并避免将属性的字符串名称硬编码到代码中。

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

这里没有错误。但不弹出/显示警报。这是为什么? – DevT 2013-04-27 20:09:34

+0

函数调用是否正确?尝试提醒一个静态字符串alert(“test”),看看是否被调用。 – 2013-04-27 20:13:19

+0

如果我把'alert(“test”)'正常工作。但不像你提到的那样工作 – DevT 2013-04-27 20:46:47