gpt4 book ai didi

jquery - 如何从单击按钮呈现的部分 View 将 recordId 传递给模型构造函数

转载 作者:行者123 更新时间:2023-12-01 00:32:41 24 4
gpt4 key购买 nike

我有一个呈现记录列表的 View 。其中一列是 ID (SynchronizationID)。另一个项目是具有动态生成 ID 的按钮,其中包含与 ID 列连接的“btnUpdate”。它运行完美。

以下是将列表呈现为网格的 View 部分:

@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 选择器,它将按钮绑定(bind)到我的点击事件,效果非常好。点击事件以及处理接受和取消按钮的按钮事件如下:

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();
}

该模式呈现一个部分 View ,其中包含一个必填字段(日期),这也可以完美运行。但是,当我输入日期并单击 Accept 按钮时, Controller 将模型传递回构造函数,并填充了日期字段(它是通过在 Controller 的该日期字段上调用 ​​SET() 方法来实现的。但是 id 字段我更新需求始终为 0。

这是部分 View :

@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。它仅用于调试目的。我只需要日期。但是当调用构造函数时,我还需要synchronizationId,以便我可以更新数据库中的这条记录。

以下是部分 View 的 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 相当陌生,这阻碍了我。

任何帮助将不胜感激。

更新:

当我继续调试这个问题时,我在 View 上添加了一个隐藏字段,其中包含名为 CurrentSynchId 的记录列表,我在按钮单击事件中设置了该字段,如下所示:

$('#CurrentSynchId').val($(this).attr('synchId'));

然后,如果我将以下行添加到我的部分 View 中,我绝对不想要:

@Html.EditorFor(model => model.SynchronizationId);

最后,在我的提交按钮处理程序的模型中为它​​工作的模式中的提交按钮设置属性值:

    $('#SynchronizationId').val($('#CurrentSynchId').val());

这是部分 View 的模型,以防有帮助:

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];
}
}

再说一遍,任何帮助都会很棒。我觉得我只是偶然发现了一些在这里起作用的东西,但我不知道为什么。如果我从部分 View 中删除 EditorFor() 辅助函数调用,它将不起作用。

再次更新:没关系。我想通了并且明白为什么。我将 EditorFor() 帮助器更改为 HiddenFor(),这会导致字段从 View 推送到部分 View ,并持久保存在部分 View 的模型中。一切都很好。

我希望其他有同样问题的人可以从中获得一些内幕。它基本上是一种使用按钮和模式制作网格的方法,并且效果很好。

最佳答案

这对我有用

@Html.HiddenFor(model => model.SynchronizationId)

关于jquery - 如何从单击按钮呈现的部分 View 将 recordId 传递给模型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com