레코드 목록을 렌더링하는 뷰가 있습니다. 하나의 열은 ID (SynchronizationID)입니다. 다른 항목은 ID 열과 연결된 "btnUpdate"를 포함하는 동적으로 생성 된 ID가있는 버튼입니다. 그것은 완벽하게 작동합니다.버튼에서 렌더링 된 부분 뷰에서 모델 생성자에 recordId를 전달하는 방법
@foreach (var item in Model.PendingSynchronizations)
{
<tr>
<td>
@item.SynchronizationID
</td>
<td>
@item.CustomerName
</td>
<td>
@item.ProductName
</td>
<td>
@String.Format("{0:g}", item.LastProcessedDate)
</td>
<td>
@item.OLAPServer
</td>
<td>
@item.OLAPDatabase
</td>
<td>
<input id="@String.Format("btnUpdate{0}",item.SynchronizationID.ToString())" type="submit" value="@String.Format("{0}", (item.ApprovedFlag) ? "Reject" : "Approve")" synchId="@item.SynchronizationID.ToString()"/>
</td>
<td>
@item.ApprovedSynchDate
</td>
</tr>
}
내가 완벽하게 작동 내 클릭 이벤트에 버튼을 결합하는 JQuery와 선택기가 : 여기
는 격자로 목록을 렌더링하는 뷰의 부분이다.function promptForSynchDate() {
$('#approve-synch').dialog({
modal: true,
height: 300,
width: 450,
title: 'Approve Production Synchronization ',
buttons:
[
{ text: "Approve", click: approveSynch },
{ text: "Cancel", click: function() { $(this).dialog("close"); } }
]
});
}
function approveSynch() {
$('#approveSynchForm').submit();
}
function updateComplete() {
alert('Production Synch Approved');
window.location.reload();
}
모달 하나의 필드도 완벽하게 작동 날짜를 필요가있는 부분 뷰를 렌더링 다음과 같이 클릭 이벤트뿐만 아니라 승인 및 취소 버튼을 처리하는 버튼 이벤트입니다. 그러나 날짜를 입력하고 수락 단추를 클릭하면 컨트롤러는 날짜 필드가 채워진 모델을 생성자에게 다시 전달합니다.이 날짜 필드는 컨트롤러의 날짜 필드에 SET() 메서드를 호출하여 수행됩니다. 그러나 ID 필드 I 업데이트가 필요하면 여기에 항상 0
있는 부분이다 :..
@model CubeBuilder.Site.Models.ProductionSynchDateModel
@using (Html.BeginForm("ToggleApprove", "Synchronization", new { id = Model.SynchronizationId }, FormMethod.Post))
{
@Html.LabelFor(model => model.SynchronizationId);
@Html.DisplayFor(model => model.SynchronizationId);
@Html.LabelFor(model => model.SyncDate);
@Html.TextBoxFor(model => model.SyncDate, new { @class = "datepicker" })
}
<script type="text/javascript">
$(document).ready(function() {
$(".datepicker").datepicker();
});
</script>
실제로이 형태로 SynchronizationId 필요하지 않습니다 그것은 디버그 목적으로 만이 그냥 날짜가 필요합니다. 그러나 생성자가 호출 될 때 데이터베이스에서이 레코드를 업데이트 할 수 있도록 동기화 ID가 필요합니다.
Followin g는 부분보기위한 Ajax 호출입니다 : 내가 생각할 수있는 모든 것을 시도
<div id="approve-synch">
@using (Ajax.BeginForm("ToggleApprove", "Synchronization", new AjaxOptions() {
OnFailure = "updateSynchFailed",
OnSuccess = "updateComplete",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "approve-synch-form" },
new { id = "approveSynchForm" }))
{
<div id="approve-synch-form">
@Html.Partial("ApproveSynch", new CubeBuilder.Site.Models.ProductionSynchDateModel())
</div>
}
</div>
, 그것은 단지 내가 나를 들고 MVC에 비교적 새로운 오전이 될 수 있다고 쉽게 인정됩니다.
grealy가 도움이 될 것입니다.
UPDATE :이 디버깅을 계속 따라 다음과 같이
, 나는 내가 버튼을 클릭 이벤트에서 설정 CurrentSynchId라는 기록의 목록보기에 숨겨진 필드를 추가 :
$('#CurrentSynchId').val($(this).attr('synchId'));
@Html.EditorFor(model => model.SynchronizationId);
을 그리고 마지막으로 설정 :
내가 내 부분보기, 다음 줄을 추가하면 그 때 나는 확실히 원하지 않는 작동 모달에 제출 버튼에 대한 내 제출 단추 처리기에 모델의 프로퍼티의 값 : 다시
public class ProductionSynchDateModel
{
public short SynchronizationId { get; set; }
public Synchronization synchInstance { get; set; }
private SynchronizationManager synchManager { get; set; }
public bool Approved
{
get;
set;
}
[Required]
[Display(Name = "Production Sync Date")]
public DateTime? Schedule
{
get;
set;
}
[Display(Name = "Production Sync Date")]
public string SyncDate
{
get
{
if (Schedule.HasValue)
return Schedule.Value.ToShortDateString();
return string.Empty;
}
set
{
Schedule = Convert.ToDateTime(value);
}
}
public ProductionSynchDateModel()
{
}
public ProductionSynchDateModel(short id)
{
var db = EntityContext.New;
SynchronizationId = id;
synchManager = new SynchronizationManager(db);
synchInstance = synchManager[SynchronizationId];
}
}
:
$('#SynchronizationId').val($('#CurrentSynchId').val());
을 여기에 도움이 경우 부분 뷰의 모델입니다 , 어떤 도움이 될 것입니다. 나는 내가 여기에서 일종의 일을 우연히 발견 한 것처럼 느껴진다. 왜 그런지 모르겠다. 부분보기에서 EditorFor() 도우미 호출을 제거하면 작동하지 않습니다.
업데이트 다시 : Nevermind. 나는 그것을 알아 냈고 나는 그 이유를 이해합니다.EditorFor() 도우미를 HiddenFor()로 변경했습니다.이 뷰는 뷰에서 부분 뷰로 푸시되고 부분 뷰의 경우 모델에 유지되도록 저장됩니다. 모두 괜찮습니다.
같은 문제가있는 다른 사람이이 문제를 해결할 수 있기를 바랍니다. 그것은 기본적으로 버튼과 모달로 그리드를 수행하는 방법이며 잘 작동합니다.