TextBox для не отображения значения (MVC4)

Я получил следующие элементы управления на мой взгляд:

<div class="editor-label">
@Html.LabelFor(model => model.Number)
</div>
<div class="editor-field">
@Html.HiddenFor(model => model.Number)
@Html.TextBoxFor(model => model.Number, new { disabled = "disabled" })
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ProjectID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Project.ID, Model.ProjectList, "Select", new { onchange = "SelectedIndexChanged()" })
</div>

Я отправляю форму, когда значение раскрывающегося списка изменяется, чтобы сгенерировать поле Number модели, затем представление перезагружается. Если элемент управления HiddenFor отсутствует, номер модели правильно отображается в TextBoxFor. Когда я добавляю элемент управления HiddenFor, поле Number не отображается, хотя Model.Number не равен NULL.

В чем причина этого?

Причина, по которой я хочу использовать HiddenFor со значением Number, заключается в том, что при отправке формы для сохранения model.Number равно нулю. Я думал, поместив значение в HiddenFor, у меня будет доступ к нему...

Изменить: метод контроллера

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult CreateOpportunity(CreateEditOpportunityModel model)
    {
        // if the submit is made by the ddl
        if (model.SubmitValue.Equals("ChangeProject"))
        {
            Project parentProject = pCtx.Projects.Find(model.Project.ID);

            if (parentProject != null)
            {   
                // Generate the "Number field"
                Region projectRegion = rCtx.Regions.Find(parentProject.RegionID);
                int numOpportunity = oCtx.Opportunitites.Count(o => o.ProjectID == parentProject.ID);
                numOpportunity++;
                string oppNumber = numOpportunity < 10 ? "0" + numOpportunity : numOpportunity.ToString();
                model.Number = projectRegion.Name + "-" + parentProject.ID + "-" + oppNumber;



            }

            // Repopulate the ddl
            model.ProjectList = new SelectList(pCtx.Projects, "ID", "ID");

            return View(model);
        }

        // if submit is made by the save button
        else if (model.SubmitValue.Equals("CreateOpportunity"))
        {
            if (ModelState.IsValid)
            {
                Opportunity opportunity = new Opportunity();
                opportunity.ID = model.ID;
                opportunity.Number = model.Number;
                opportunity.ActivationDate = model.ActivationDate;
                opportunity.Assignee = model.Assignee;
                opportunity.Comments = model.Comments;
                opportunity.CreationDate = DateTime.Now;
                opportunity.LicenseFilePath = model.LicenseFilePath;
                opportunity.LicenseRequestFilePath = model.LicenseRequestFilePath;
                opportunity.OkPermanentStatus = model.OkPermanentStatus;
                opportunity.PaidStatus = model.PaidStatus;
                opportunity.PartNumber = model.PartNumber;
                opportunity.Project = pCtx.Projects.Find(model.Project.ID);

                //tell EF that Project already exists in Company table
                oCtx.Entry(opportunity.Project).State = EntityState.Modified;

                // Saves project
                oCtx.Opportunitites.Add(opportunity);
                oCtx.SaveChanges();
                return RedirectToAction("Index");
            }

            model.ProjectList = new SelectList(pCtx.Projects, "ID", "ID");

            return View(model);
        }

        model.ProjectList = new SelectList(pCtx.Projects, "ID", "ID");

        return View(model);
    }

Эта часть кода работает нормально, я просто помещаю ее здесь, чтобы прояснить ситуацию.

0 ответов

Другие вопросы по тегам