2011-01-07 102 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