2 votes

L'élément de modèle passé dans le dictionnaire est de type 'System.Int64'.

J'ai un modèle qui contient une collection d'éléments, ces éléments sont affichés en utilisant un EditorTemplate. Si mon modèle ne contient pas de valeur pour le champ Quantité, je n'ai aucun problème. Cependant, si la propriété quantité a une valeur, lorsque la vue du modèle est rendue, l'exception suivante est levée sur le @Html.EditorFor(m=>m.Quantity ... :

The model item passed into the dictionary is of type 'System.Int64', 
but this dictionary requires a model item of type 'System.String'

Voici le modèle de l'éditeur.

@model OrderLineItemModel
<tr id="rowid-@Model.ItemID">
    <td class="itemidcell">@Html.HiddenFor(m=>m.ItemID) @Html.DisplayFor(m=>m.ItemID)</td>
    <td>@Html.HiddenFor(m => m.CustomerItemID)@Html.DisplayFor(m=>m.CustomerItemID)</td>
    <td>@Html.HiddenFor(m => m.ItemName)@Html.DisplayFor(m=>m.ItemName)</td>
    <td>@Html.HiddenFor(m => m.BlanketOrderQuantity)@Html.DisplayFor(m=>m.BlanketOrderQuantity)</td>
    <td>@Html.HiddenFor(m => m.ReleasedQuantity)@Html.DisplayFor(m=>m.ReleasedQuantity)</td>
    <td>@Html.HiddenFor(m => m.RemainingQuanity)@Html.DisplayFor(m=>m.RemainingQuanity)</td>
    <td id="cellid-@Model.ItemID">@Html.DisplayFor(m=>m.Price)</td>
    <td class="quantitycell">@Html.EditorFor(m=>m.Quantity, new {@class = "quantitytxt"}) @Html.ValidationMessageFor(m => m.Quantity)</td>
</tr>

La ligne qui fait défaut est celle-ci.

<td class="quantitycell">@Html.EditorFor(m=>m.Quantity, new {@class = "quantitytxt"}) @Html.ValidationMessageFor(m => m.Quantity)</td>

La quantité a un type de données de Int64. Je ne sais pas pourquoi le dictionnaire exige une chaîne de caractères la deuxième fois et pas lors du premier rendu.

Voici l'action du contrôleur.

    [HttpPost]
    public ActionResult Release(ReleaseModel model) {          

        var errors = _orderProcessorService.ValidateOrder(model);

        if (errors.Count > 0) {
            foreach (var orderValidationError in errors) {
                ModelState.AddModelError(orderValidationError.Name, orderValidationError.Description);
            }
        }

        if (! ModelState.IsValid) {

            return View(model);
        }

        var response = _orderProcessorService.SubmitOrder(model);

        var responseModel = new OrderResponseModel();
        if (response.OrderStatus == Enumerations.OrderStatus.Success) {
            responseModel.Message = "Thank you for submitting your order. Your sales representative will contact you with any questions concerning your order.";
            responseModel.OrderStatus = "successful";
        }
        else {
            responseModel.Message = "We are sorry, but something has happened during your order submission and your order wasn't processed successfully. Please contact your sales representative regarding this order submission.";
            responseModel.OrderStatus = "failed";
        }

        return View("OrderSubmitted", responseModel);

    }

Voici mon modèle qui est utilisé pour le modèle.

using System;
using System.ComponentModel.DataAnnotations;

namespace ViewModels.BlanketOrder {
    public class OrderLineItemModel  {
        [Display(Name = "Customer Item #")]
        public string CustomerItemID { get; set; }

        [Display(Name = "Item #")]
        public string ItemID { get; set; }

        [Display(Name = "Item Name")]
        public string ItemName { get; set; }

        [DisplayFormat(DataFormatString = "#,###")]
        public int? PriceUnit { get; set; }

        public string UnitID { get; set; }

        [Display(Name = "Quantity")]
        [Required(ErrorMessage = "Item Quantity is required")]
        [RegularExpression(@"[0-9]+", ErrorMessage = "Item Quantity must be a whole Number")]
        [Range(1, 15000000, ErrorMessage = "Item Quantity must be between 1 - 15000000")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0}", NullDisplayText = "0")]
        public Int64? Quantity { get; set; }

        [Display(Name = "Unit Price")]
        public Decimal? Price { get; set; }

        public Int64 BlanketOrderQuantity { get; set; }
        public Int64 ReleasedQuantity { get; set; }
        public Int64 RemainingQuanity { get; set; }
    }
}

0voto

Mr. Manager Points 3157

Regardez ma réponse à ma propre question.

https://stackoverflow.com/questions/10723782/how-can-i-pass-an-int-value-as-the-linktext-for-and-actionlink/10726097#10726097

Vous pourriez être en mesure de le faire.

@Html.ValidationMessageFor(m => (string)m.Quantity.ToString() ?? 0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X