MVC; Как избежать конфликтов имен идентификаторов при использовании вкладок?

MVC есть за что похвалить, но одна проблема, с которой я сталкиваюсь, - это конфликты имен ID. Я впервые заметил это при создании сетки с помощью цикла foreach. С помощью SO я нашел решение использовать шаблоны редактора. Теперь у меня такая же проблема с вкладками. Я использовал эту ссылку, чтобы узнать, как использовать вкладки; http://blog.roonga.com.au/search?updated-max=2010-06-14T19:27:00%2B10:00&max-results=1

Проблема с моими вкладками в том, что я используя поле даты с выбором даты. В приведенном выше примере конфликта имен идентификаторов можно избежать путем ссылки на сгенерированный уникальный идентификатор элемента контейнера. Однако для datepicker идентификатор контейнера не имеет значения, имеет значение только идентификатор поля даты. Итак, что происходит, если я создаю свою вторую вкладку так же, как первую, когда я обновляю свою вторую вкладку, дата на первой обновляется. Итак, ниже мой вид и частичный вид, в котором отображается дата. Когда я нажимаю кнопку «Добавить отсутствие на 1 день», я создаю вкладку для этого экрана;

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/AdminAccounts.master" 
Inherits="System.Web.Mvc.ViewPage" %>


 AbsenceForEmployee



    
    <% using (Html.BeginForm()) {%>
    <%: Html.AntiForgeryToken() %>
        
Select an employee to edit absence record
Name: <%: Model.Employee.GetName() %>
Division:<%: Model.DivisionName %>
Department: <%: Model.DepartmentName %>

Attendance record for the year <%: Html.DropDownListFor(model => model.SelectedYearId, Model.YearList, new { onchange = "this.form.submit();" })%>

')" value='Add Absence for 1 day' /> ')" value='Add Absence for a range of dates' />
<% Html.RenderPartial("ListAbsence", Model.ListEmployeeAbsenceThisYear); %>
<% } %>

Добавить новое частичное представление даты ...

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% var unique = DateTime.Now.Ticks.ToString(); %>


<% using (Html.BeginForm("AddAbsenceOneDay", "Employee", FormMethod.Post, new { id = "frmAddAbsenceOneDay" + unique })) { %> <%: Html.ValidationSummary(true) %>
Add an absence for a day or half day
<%: Html.LabelFor(model => model.OtherLeaveId)%> <%: Html.DropDownListFor(model => model.OtherLeaveId, Model.SelectLeaveTypeList, "<--Select-->")%> <%: Html.ValidationMessageFor(model => model.OtherLeaveId)%>
<%: Html.LabelFor(model => model.NullableOtherLeaveDate)%> <%: Html.EditorFor(model => model.NullableOtherLeaveDate)%> <%: Html.ValidationMessageFor(model => model.NullableOtherLeaveDate)%> <%if (ViewData["ErrorDateMessage"] != null && ViewData["ErrorDateMessage"].ToString().Length > 0) { %>

At <% Response.Write(DateTime.Now.ToString("T")); %>. <%: ViewData["ErrorDateMessage"]%>.

<%} %>
<%: Html.LabelFor(model => model.MorningOnlyFlag)%> <%: Html.CheckBoxFor(model => model.MorningOnlyFlag)%> <%: Html.ValidationMessageFor(model => model.MorningOnlyFlag)%>
<%: Html.LabelFor(model => model.AfternoonOnlyFlag)%> <%: Html.CheckBoxFor(model => model.AfternoonOnlyFlag)%> <%: Html.ValidationMessageFor(model => model.AfternoonOnlyFlag)%>

<% } %>

Вы можете увидеть идентификатор даты в следующем HTML-коде из Firebug

// Menu removed
Select an employee to edit absence record
Name: xaviar caviar
Division:ICT
Department: ICT

Absence Leave record for the year


Leave TypeMorning OnlyAfternoon OnlyDay AmountDate
DeleteSicknessFalseFalse104/11/2010
DeleteUnpaid SicknessFalseFalse108/11/2010
DeleteUnpaid CompassionateFalseFalse109/11/2010
DeleteCompassionateFalseFalse110/11/2010
DeleteCompassionateFalseFalse115/11/2010
DeleteUnpaid SicknessFalseFalse116/11/2010
DeleteCompassionateFalseFalse117/11/2010
DeleteCompassionateFalseFalse122/11/2010
DeleteUnpaid SicknessFalseFalse124/11/2010
DeleteSicknessFalseFalse125/11/2010
DeleteUnpaid SicknessFalseFalse126/11/2010
DeleteUnpaid SicknessFalseFalse129/11/2010
DeleteCompassionateFalseFalse130/11/2010
DeleteUnpaid SicknessFalseFalse113/12/2010
DeleteCompassionateFalseFalse126/12/2010

Add an absence for a day or half day

Add an absence for a day or half day

] Если вы зашли так далеко (!), Меня спросили о контроллере, так что вот он.

[Authorize(Roles = "Administrator, AdminAccounts, ManagerAccounts")]
public ActionResult AddAbsenceOneDay()
{
    return View(new EmployeeOtherLeaf());
}

[HttpPost]
[Authorize(Roles = "Administrator, AdminAccounts, ManagerAccounts")]
public ActionResult AddAbsenceOneDay(EmployeeOtherLeaf _absence)
{
    if (ModelState.IsValid)
    {
        _absence.EmployeeId = SessionObjects.EmployeeId; 
        _absence.OtherLeaveDate = _absence.NullableOtherLeaveDate.GetValueOrDefault(DateTime.Today);
        Tuple errorInfo = _absence.IsDateValid();
        if (errorInfo.Item1 == true)
        {
            _absence.AddAndSave();
            ViewData["SuccessMessage"] = "Successfully Added.";
            return View("EditAbsenceOneDay", _absence);
        }
        else
        {
            ViewData["ErrorDateMessage"] = errorInfo.Item2;
            return View(_absence);
        }
    }
    else
    {
        return View(_absence);
    }
}

6
задан arame3333 16 November 2010 в 17:11
поделиться