2012-04-15 59 views
6

Tôi cần trợ giúp về lỗi được hiển thị trong tiêu đề, mã của tôi cho điều này được hiển thị bên dưới. Các lỗi được xuất hiện trên dòng này:Chuỗi đầu vào không đúng định dạng

@Html.EditorForModel() 

Code:

@model Assignment2.Models.Order 

@{ 
    ViewBag.Title = "Address And Payment"; 
} 



<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 

    <h2>Address And Payment</h2> 
    <fieldset> 
     <legend>Shipping Information</legend> 

     @Html.EditorForModel() 
    </fieldset> 
    <fieldset> 
     <legend>Payment</legend> 
     <p>We're running a promotion: all tickets free with the promo code: "FREE"</p> 

     <div class="editor-label"> 
      @Html.Label("Promo Code") 
     </div> 
     <div class="editor-field"> 
      @Html.TextBox("PromoCode") 
     </div> 
    </fieldset> 

<input type="submit" value="Submit Order" /> 
} 

Bộ điều khiển:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Assignment2.Models; 

namespace Assignment2.Controllers 
{ 
    [Authorize] 
    public class CheckoutController : Controller 
    { 
     TicketBookingEntities storeDB = new TicketBookingEntities(); 
     const string PromoCode = "FREE"; 

     // 
     // GET: /Checkout/AddressAndPayment 

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

     // 
     // POST: /Checkout/AddressAndPayment 
     [HttpPost] 
     public ActionResult AddressAndPayment(FormCollection values) 
     { 
      var order = new Order(); 
      TryUpdateModel(order); 

      try 
      { 
       if (string.Equals(values["PromoCode"], PromoCode, 
        StringComparison.OrdinalIgnoreCase) == false) 
       { 
        return View(order); 
       } 

       else 
       { 
        order.Username = User.Identity.Name; 
        order.OrderDate = DateTime.Now; 

        //Save Order 
        storeDB.Orders.Add(order); 
        storeDB.SaveChanges(); 

        //Process the order 
        var cart = ShoppingCart.GetCart(this.HttpContext); 
        cart.CreateOrder(order); 

        return RedirectToAction("Complete", 
         new { id = order.OrderId }); 
       } 
      } 

      catch 
      { 
       //Invalid - redisplay with errors 
       return View(order); 

      } 
     } 

     // 
     // GET: /Checkout/Complete 
     public ActionResult Complete(int id) 
     { 
      // Validate customer owns this order 
      bool isValid = storeDB.Orders.Any(
       o => o.OrderId == id && 
       o.Username == User.Identity.Name); 
      if (isValid) 
      { 
       return View(id); 
      } 
      else 
      { 
       return View("Error"); 
      } 
     } 
    } 
} 

Xem:

@model Assignment2.ViewModels.ShoppingCartViewModel 

@{ 
    ViewBag.Title = "Shopping Cart"; 
} 

<script src="/Scripts/jquery-1.4.4.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() { 
     // Document.ready -> link up remove event handler 
     $(".RemoveLink").click(function() { 
      // Get the id from the link 
      var recordToDelete = $(this).attr("data-id"); 

      if (recordToDelete != '') { 

       // Perform the ajax post 
       $.post("/ShoppingCart/RemoveFromCart", { "id": recordToDelete }, 
        function (data) { 
         // Successful requests get here 
         // Update the page elements 
         if (data.ItemCount == 0) { 
          $('#row-' + data.DeleteId).fadeOut('slow'); 
         } else { 
          $('#item-count-' + data.DeleteId).text(data.ItemCount); 
         } 

         $('#cart-total').text(data.CartTotal); 
         $('#update-message').text(data.Message); 
         $('#cart-status').text('Cart (' + data.CartCount + ')'); 
        }); 
      } 
     }); 
     }); 

    function handleUpdate() { 
     // Load and deserialize the returned JSON data 
     var json = context.get_data(); 
     var data = Sys.Serialization.JavaScriptSerializer.deserialize(json); 
     // Update the page elements 
     if (data.ItemCount == 0) { 
      $('#row-' + data.DeleteId).fadeOut('slow'); 
     } else { 
      $('#item-count-' + data.DeleteId).text(data.ItemCount); 
     } 
     $('#cart-total').text(data.CartTotal); 
     $('#update-message').text(data.Message); 
     $('#cart-status').text('Cart (' + data.CartCount + ')'); 
    } 
</script> 
<h3> 
    <em>Review</em> your cart: 
</h3> 
<p class="button"> 
    @Html.ActionLink("Checkout >>", "AddressAndPayment", "Checkout") 
</p> 
<div id="update-message"> 
</div> 
<table> 
    <tr> 
     <th> 
      Production Name 
     </th> 
     <th> 
      Price (each) 
     </th> 
     <th> 
      Quantity 
     </th> 
     <th></th> 
</tr> 
@foreach (var item in Model.CartItems) 
{ 
    <tr id="[email protected]"> 
     <td> 
      @Html.ActionLink(item.Performance.Title, "Details", "Store", new { id = item.PerformanceId }, null) 
     </td> 
     <td> 
      @item.Performance.Price 
     </td> 
     <td id="[email protected]"> 
      @item.Count 
     </td> 
     <td> 
      <a href="#" class="RemoveLink" data-id="@item.RecordId">Remove from cart</a> 
     </td> 
    </tr> 
} 
    <tr> 
     <td> 
      Total 
     </td> 
     <td> 
     </td> 
     <td> 
     </td> 
     <td id="cart-total"> 
      @Model.CartTotal 
     </td> 
    </tr> 
</table> 

Stack Trace:

[FormatException: Input string was not in a correct format.] 
    System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args) +9358943 
    System.String.Format(IFormatProvider provider, String format, Object[] args) +107 
    System.ComponentModel.DataAnnotations.ValidationAttribute.FormatErrorMessage(String name) +76 
    System.Web.Mvc.DataAnnotationsModelValidator.get_ErrorMessage() +30 
    System.Web.Mvc.RequiredAttributeAdapter.GetClientValidationRules() +45 
    System.Web.Mvc.HtmlHelper.<.ctor>b__1(ModelValidator v) +10 
    System.Linq.<SelectManyIterator>d__14`2.MoveNext() +238 
    System.Web.Mvc.HtmlHelper.GetUnobtrusiveValidationAttributes(String name, ModelMetadata metadata) +632 
    System.Web.Mvc.Html.InputExtensions.InputHelper(HtmlHelper htmlHelper, InputType inputType, ModelMetadata metadata, String name, Object value, Boolean useViewData, Boolean isChecked, Boolean setId, Boolean isExplicitValue, IDictionary`2 htmlAttributes) +807 
    System.Web.Mvc.Html.DefaultEditorTemplates.StringTemplate(HtmlHelper html) +135 
    System.Web.Mvc.Html.ActionCacheCodeItem.Execute(HtmlHelper html, ViewDataDictionary viewData) +30 
    System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate(HtmlHelper html, ViewDataDictionary viewData, String templateName, DataBoundControlMode mode, GetViewNamesDelegate getViewNames, GetDefaultActionsDelegate getDefaultActions) +330 
    System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData, ExecuteTemplateDelegate executeTemplate) +1117 
    System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData) +66 
    System.Web.Mvc.Html.DefaultEditorTemplates.ObjectTemplate(HtmlHelper html, TemplateHelperDelegate templateHelper) +575 
    System.Web.Mvc.Html.DefaultEditorTemplates.ObjectTemplate(HtmlHelper html) +47 
    System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate(HtmlHelper html, ViewDataDictionary viewData, String templateName, DataBoundControlMode mode, GetViewNamesDelegate getViewNames, GetDefaultActionsDelegate getDefaultActions) +714 
    System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData, ExecuteTemplateDelegate executeTemplate) +1117 
    System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData) +66 
    System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper html) +60 
    ASP._Page_Views_Checkout_AddressAndPayment_cshtml.Execute() in c:\Users\Ian\Desktop\Assignment2\Assignment2\Assignment2\Views\Checkout\AddressAndPayment.cshtml:19 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +207 
    System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +81 
    System.Web.WebPages.StartPage.RunPage() +19 
    System.Web.WebPages.StartPage.ExecutePageHierarchy() +65 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76 
    System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +220 
    System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115 
    System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +303 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13 
    System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +260 
    System.Web.Mvc.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() +19 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +177 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343 
    System.Web.Mvc.Controller.ExecuteCore() +116 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 
    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10 
    System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37 
    System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 
    System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 
    System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50 
    System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970061 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

mẫu:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 


namespace Assignment2.Models 
{ 
    [Bind(Exclude = "OrderId")] 
    public partial class Order 
    { 
     [ScaffoldColumn(false)] 
     public int OrderId { get; set; } 

     [ScaffoldColumn(false)] 
     public System.DateTime OrderDate { get; set; } 

     [ScaffoldColumn(false)] 
     public string Username { get; set; } 

     [Required(ErrorMessage = "First Name is required")] 
     [DisplayName("First Name")] 
     [StringLength(160)] 
     public string FirstName { get; set; } 

     [Required(ErrorMessage = "Last Name is required")] 
     [DisplayName("Last Name")] 
     [StringLength(160)] 
     public string LastName { get; set; } 

     [Required(ErrorMessage = "Please enter Address")] 
     [StringLength(70)] 
     public string Address { get; set; } 

     [Required(ErrorMessage = "Please enter City")] 
     [StringLength(40)] 
     public string City { get; set; } 

     [Required(ErrorMessage = "Please enter County")] 
     [StringLength(40)] 
     public string County { get; set; } 

     [Required(ErrorMessage = "Please enter {Postal Code")] 
     [DisplayName("Postal Code")] 
     [StringLength(10)] 
     public string PostalCode { get; set; } 

     [Required(ErrorMessage = "Please enter Country")] 
     [StringLength(40)] 
     public string Country { get; set; } 

     [Required(ErrorMessage = "Please enter Phone Number")] 
     [StringLength(24)] 
     public string Phone { get; set; } 

     [Required(ErrorMessage = "Email Address is required")] 
     [DisplayName("Email Address")] 
     [RegularExpression(@"[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}", 
     ErrorMessage = "Email is is not valid.")] 
     [DataType(DataType.EmailAddress)] 
     public string Email { get; set; } 

     [ScaffoldColumn(false)] 
     public decimal Total { get; set; } 


     public List<OrderDetail> OrderDetails { get; set; } 
    } 
} 

Nếu bạn cần bất kỳ thông tin khác xin vui lòng cho tôi biết, nhờ

+0

Dấu vết ngăn xếp của ngoại lệ là gì? – svick

+0

@svick được cập nhật ở trên – user1300580

+0

Mô hình của bạn ('Assignment2.Models.Order') trông như thế nào? – nemesv

Trả lời

17

Bạn có một không cần thiết { trong PostalCode nhắn RequiredAttribute 's lỗi của bạn:

[Required(ErrorMessage = "Please enter {Postal Code")] 

xóa nó và nó sẽ hoạt động.

Bạn có ngoại lệ vì khung sử dụng ErrorMessage làm format string và với một khung không được đính kèm { điều này không hợp lệ.

+0

yep, ném ra các định dạng – NSGaga

+0

Cảm ơn, tôi đã chỉ làm việc nó ra bản thân mình sau đó thấy bài viết của bạn, nhờ anyway guys :-) – user1300580

+0

Câu trả lời tiếp theo đã giúp tôi: Làm thế nào để thoát niềng răng (dấu ngoặc) trong một chuỗi định dạng trong. : http://stackoverflow.com/a/91375/1390999 –

Các vấn đề liên quan