ASP.NET MVC5剃须刀刷新模式对话框



每当用户按订单按钮时,我都会尝试在模态对话框中获取实际时间。

<a class="btn btn-primary" data-toggle="modal" data-target="#OrderModal">@MEDONET.Language.Doctor.Texts.Order</a>

因此,每次他在模态Div Ordermodal

中这样做
<div id="OrderModal" class="modal fade" role="dialog">
    @Html.Action("CreateOrderForm", Model.CreateOrderVM)
</div>

哪些呼吁创建订单form action

public ActionResult CreateOrderForm(CreateOrderVM createOrderVM)
    {
        createOrderVM.Minute = DateTime.Now.Minute.ToString().PadLeft(2, '0');
        return View("CreateOrderForm", createOrderVM);
    }

这样,该操作实际上每次都在运行并调用CreateOrderForm.cshtml文件

@{
Layout = null;
}
@model MEDONET.Models.CreateOrderVM
<div class="modal-dialog modal-sm">
<!-- Modal content-->
<div class="modal-content">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title text-center">Order To Line</h4>
    </div>
    <div class="modal-body">
        @using (Html.BeginForm("CreateOrder", "Doctors", FormMethod.Post))
        {
            @Html.AntiForgeryToken()
            @Html.HiddenFor(m => m.DoctorId)
            <div class="row text-center">
                <p>Date & Time</p>
                @Html.Label("Year")
                @Html.EditorFor(model => model.Year, new { htmlAttributes = new { @class = "form-control", @Value = DateTime.Now.Year } })<br />
                @Html.Label("Month")
                @Html.EditorFor(model => model.Month, new { htmlAttributes = new { @class = "form-control", @Value = DateTime.Now.Month } })<br />
                @Html.Label("Day")
                @Html.EditorFor(model => model.Day, new { htmlAttributes = new { @class = "form-control", @Value = DateTime.Now.Day } })<br />
                @Html.Label("Hour")
                @Html.EditorFor(model => model.Hour, new { htmlAttributes = new { @class = "form-control", @Value = DateTime.Now.Hour } })<br />
                @Html.Label("Minute")
                @Html.EditorFor(model => model.Minute, new { htmlAttributes = new { @class = "form-control" } })<br />
                @if (this.User.IsInRole("Registrator"))
                {
                    @Html.EditorFor(model => model.PhoneNumber, new { htmlAttributes = new { @class = "form-control" } })<br />
                }
                <button type="submit" class="btn btn-default">Submit</button>
            </div>
        }
    </div>
    <div class="modal-footer">
    </div>
</div>

但是!弹出字段仍然是第一次填充父页面加载时给出的。

每次按订单按钮时,我该如何给用户新的时间?

剃须刀代码仅在第一次加载时仅执行一次。之后,每次切换模态弹出窗口时,它都会显示/隐藏相同的HTML。单击按钮打开模式后,解决方案将是更新HTML。您可以使用jQuery的load()方法来实现此目的。

首先,您需要使用JavaScript来切换模态而不是HTML。修改您的按钮如下

<a class="btn btn-primary" id="openModal">@MEDONET.Language.Doctor.Texts.Order</a>

在JavaScript中,为此按钮添加事件处理程序,如下面的

$('#openModal').on('click', function() {
  ...
})

然后,加载儿童动作的内容。

$('#openModal').on('click', function() {
  $("#OrderModal").load("@Url.Action("CreateOrderForm", "ControllerName")", function() {
    $('#OrderModal').modal('show')
  });
})

我尚未测试过上述代码,它可能需要很少的错别字校正。让我知道,如果它不起作用。

我猜想该方法使用某种帖子,而不是返回新表单。在这种情况下,当您返回相同的视图时,模型状态是填充这些字段的状态。为了解决该动作

的添加
ModelState.Clear();

ModelState.Remove("myChangeValue");

您可以在https://blogs.msdn.microsoft.com/simonince/simonince/2010/05/05/asp-net-mvcs-html-helpers-helpers-nelpers-the-wrong-value/

如果您只想更改模式中的时间,我建议您在显示模式时使用JavaScript更改。

$('#OrderModal #Minute').val(new Data().getMinutes());

最新更新