2012-04-15 134 views
6

我需要一些关于标题中显示的错误的帮助,我的代码如下所示。 错误是出现在这条线:输入字符串格式不正确

@Html.EditorForModel() 

代码:

@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" /> 
} 

控制器:

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

查看:

@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> 

堆栈跟踪:

[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 

型号:

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

如果您需要任何其他信息,请让我知道,谢谢

+0

什么是异常的堆栈跟踪? – svick 2012-04-15 13:58:17

+0

@svick更新超过 – user1300580 2012-04-15 14:01:03

+0

你的模型('Assignment2.Models.Order')看起来像什么? – nemesv 2012-04-15 14:05:49

回答

17

您的PostalCodeRequiredAttribute的错误消息不必要{

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

删除它,它应该工作。

您得到了例外,因为框架使用ErrorMessage作为format string,并且一个未关闭{这是无效的。

+0

是的,抛出格式 – NSGaga 2012-04-15 14:21:32

+0

谢谢,我刚刚完成了自己,然后看到你的文章,谢谢无论如何球员:-) – user1300580 2012-04-15 14:24:54

+0

下一个帮助我的答案:如何在.NET中的格式字符串中大括号(大括号) :http://stackoverflow.com/a/91375/1390999 – 2016-11-27 12:14:48