2011-01-07 77 views
0

我真的不知道该怎么称号给予了这个问题,但我会在这里解释:通部分查看问题Asp.Net MVC

我有一堆输入字段的视图一张桌子。表格中的每一行都代表一项任务,每一个工作日一栏,每个单元格中的输入字段都会让用户输入工作时间和日期。

然后我有一个提交按钮来发布用户想要保存的时间。但问题在于:每个时间段(作为持有小时数的对象都被调用)也具有属性Description,以便让用户编写关于所报告的特定时间段的完成情况的描述。

那么我怎样才能获得所选时间段输入字段的描述属性,并显示在另一个“描述”输入字段中,然后让用户修改描述并使用timesegment保存它?

这是我到目前为止已经完成:

操作方法来获得描述:

public ActionResult GetDescription(string name, int number, int year) 
    { 
     try 
     { 
      int taskId = Int32.Parse(name.SubstringAfter("Tasks[").Substring(0, 1)); 
      int timeSegmentId = Int32.Parse(name.SubstringAfter("CurrentTimeSegments[").Substring(0, 1)); 
      List<Task> tasks = _repository.GetCurrentTasks(number, year); 
      var description = tasks[taskId].CurrentTimeSegments[timeSegmentId].Description; 

      return Content(description); 
     } 
     catch (Exception) 
     { 

      return Content(""); 
     } 
    } 

的jQuery:

function getDescription() { 
     $('.hourInput').focus(function() { 
      var name = $(this).attr('name'); 
      var number = '<%: Model.WeekNumber %>'; 
      var year = '<%: Model.Year %>'; 
      var url = '<%=Url.Action("GetDescription", "Timesheet") %>'; 
      $.get(url, { name: name, number: number, year: year }, function (data) { 
       $('#description').val(data); 
      }); 
     }); 
    } 

现在,你可以看到,我有解析输入字段的名称属性以获取我之后的对象,这看起来有点像黑客......但这是我能看到获取这些信息的唯一途径。所以我的问题是,是否有另一种更干净的方式来做到这一点?

UPDATE:

下面是一个创建嵌套的输入域环路(完成每项任务的循环,然后每个任务的所有timesegments)的部分:

<% for (int i = 0; i < Model.Tasks.Count; i++) 
      { 
       var task = Model.Tasks[i]; 
     %> 
     <tr class="taskrow"> 
      <td> 
       <input type="button" value="Delete" id="<%:i %>" class="deletebutton" /> 
      </td> 
      <td class="customer"> 
       <%: task.Project.Customer.Name %> 
      </td> 
      <td class="project"> 
       <%: task.Project.Name %> 
      </td> 
      <td class="task"> 
       <%: task.Name %> 
      </td> 
      <% for (int j = 0; j < task.CurrentTimeSegments.Count; j++) 
       { %> 
      <td> 
       <%: Html.TextBoxFor(model => model.Tasks[i].CurrentTimeSegments[j].TimeSpanHours, new { @class = "hourInput" })%> 
       <%: Html.ValidationMessageFor(model => model.Tasks[i].CurrentTimeSegments[j].TimeSpanHours)%> 
      </td> 
      <% } %> 
      <td class="hourSum"><%:task.WeekTaskHours %></td> 
     </tr> 
     <% } %> 

注意,此代码如果它很重要的话,它是处于局部的。

回答

0

您可以使用$.data jQuery函数在getDescription方法的this元素中保存额外的信息。创建此元素时需要这样做。我不知道你是怎么做到的,如果你现在的设计有可能。

保存这将是信息:

$(element).data('taskId', taskId); 
$(element).data('timeSegmentId', timeSegmentId); 

如果你给在其中创建此元素的代码,我可以帮你。

然后getDescription方法是

$('.hourInput').focus(function() { 
    var taskId = $(this).data('taskId'); 
    vat timeSegmentId = $(this).data('timeSegmentId'); 
    var number = '<%: Model.WeekNumber %>'; 
    var year = '<%: Model.Year %>'; 
    var url = '<%=Url.Action("GetDescription", "Timesheet") %>'; 
    $.get(url, { taskId : taskId, timeSegmentId: timeSegmentId, number: number, year: year }, function (data) { 
     $('#description').val(data); 
    }); 
}); 
在控制器

public ActionResult GetDescription(string taskId, string timeSegmentId, int number, int year) 
{ 
    try 
    { 
     List<Task> tasks = _repository.GetCurrentTasks(number, year); 
     var description = tasks[taskId].CurrentTimeSegments[timeSegmentId].Description; 

     return Content(description); 
    } 
    catch (Exception) 
    { 
     return Content(""); 
    } 
} 

编辑

等:

根据您如何创建输入文本框,我认为你可以做:

<td> 
    <%: Html.TextBoxFor(model => model.Tasks[i].CurrentTimeSegments[j].TimeSpanHours, new { @class = "hourInput", id = "uniqueId_" + i + j })%> 
    <%: Html.ValidationMessageFor(model => model.Tasks[i].CurrentTimeSegments[j].TimeSpanHours)%> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
     var selector = '#uniqueId_<%=i %><%=j %>'; 
     $(selector).data('taskId', <%=i %>); 
     $(selector).data('timeSegmentId', <%=j %>); 
     }); 
    </script> 
</td> 
+0

感谢您的回复。这听起来很有趣,我只是不确定我可以用我的代码来做到这一点......正如你可以从我的更新中看到的那样,输入字段是在局部视图中的一个循环中创建的。所以我不知道如何通过jQuery将数据添加到每个字段,因为它正在此循环中创建? – Anders 2011-01-09 15:45:24