View строго типизирован для просмотра модели, не возвращающей модель обратно в контроллер при обратной передаче - PullRequest
0 голосов
/ 30 сентября 2010

У меня есть PartialView, строго типизированный для модели представления

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<VATRateManager_MVC.Models.ViewModels.RateControlEditViewModel>" %>

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>

<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm("Edit", "Rate", FormMethod.Post))
{ %>
<%=Html.ValidationSummary() %>

<%=Html.HiddenFor(Model => Model.ParentID)%>
<%=Html.HiddenFor(Model => Model.ParentTypeID)%>
<%=Html.HiddenFor(Model => Model.ParentTypeDescription)%>
<%=Html.HiddenFor(Model => Model.RateID)%>

<div >
    <%=Html.LabelFor(Model => Model.RateValue)%>
    <%=Html.DisplayFor(Model => Model.RateValue) %>
</div>

<div>
    <%=Html.LabelFor(Model => Model.StartDate)%>
    <%=Html.DisplayFor(Model => Model.StartDate, new { @class = "date" })%>
   <%-- <%=Html.EditorFor(Model => Model.StartDate, new { @class = "date" })%>--%>
</div>

<div>
    <input type="submit" name="button" value="Edit"/>
</div>

Вот модель представления

public class RateControlEditViewModel
{
    /// <summary>The parent ID is the Rate ID for the Current record. </summary>
    [HiddenInput(DisplayValue = false)]
    public int ParentID { get; set; }

    /// <summary>The parent Type ID is the Type ID for the Current record. </summary>
    [HiddenInput (DisplayValue= false)]
    public int ParentTypeID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public string ParentTypeDescription { get; set; }

    /// <summary>Rate ID for current record, may be null if adding new rate. </summary>
    [HiddenInput(DisplayValue = false)]
    public int? RateID { get; set; }

    /// <summary>Percentage VAT Rate to 2 decimal places. </summary>
    [DisplayName("VAT Rate (%)")]
    [Required(ErrorMessage ="Please Supply VAT Rate as percentage value")]
    [Range(typeof(Decimal), "0","100")]
    public decimal RateValue { get; set; }

    /// <summary>Start date from which this VAT Rate will be active, the start date will also be
    /// the same value for the previous records End Date to ensure there are no gaps in the Rate.</summary>
    [DisplayName("VAT Rate Start Date")]
    [DataType(DataType.Date)]
    [Required(ErrorMessage="Please Supply Start date from which this VAT rate will become active")]
    public DateTime? StartDate { get; set; }

}

И вот метод Controller ...

  [ActionName("Edit")]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(string button, RateControlEditViewModel model)
    { // Do Stuff here 
    }

Моя проблема в том, что объект "RateControlEditViewModel model", переданный в контроллер, потерял некоторые из своих значений ... По существу, на экране должен отображаться список объектов, при нажатии кнопки "Редактировать" должно открываться новое представление, отображающее объект, который вы щелкнули 1чтобы позволить вам редактировать его - но он теряет значения.Помогите!

1 Ответ

0 голосов
/ 30 сентября 2010

Хорошо, похоже, что если вы используете «DisplayFor», атрибуты модели не заполняются.Используя мой пример ниже, значения, которые я получаю обратно в контроллер, являются значениями в объектах «HiddenFor», но не значениями в «DisplayFor».

<%=Html.HiddenFor(Model => Model.ParentID)%>
<%=Html.HiddenFor(Model => Model.ParentTypeID)%>
<%=Html.HiddenFor(Model => Model.ParentTypeDescription)%>
<%=Html.HiddenFor(Model => Model.RateID)%>
<div >
    <%=Html.LabelFor(Model => Model.RateValue)%>
    <%=Html.DisplayFor(Model => Model.RateValue) %>
</div>

<div>
    <%=Html.LabelFor(Model => Model.StartDate)%>
    <%=Html.DisplayFor(Model => Model.StartDate, new { @class = "date" })%>
</div>

Чтобы решить эту проблему, я просто включил «HiddenFor» для двух других атрибутов:)

<%=Html.HiddenFor(Model => Model.RateValue)%>
<%=Html.HiddenFor(Model => Model.StartDate)%>

Просто, я думаю - надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...