ASP.NET MVC5 Razor Refresh模式对话框

时间:2017-12-04 09:57:37

标签: javascript jquery asp.net asp.net-mvc razor

每次用户按下“订购”按钮时,我都会尝试在模态对话框中获取实际时间。

<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>

调用CreateOrderForm操作

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>

BUT!在父页面加载时,弹出字段仍然是第一次填充。

每次按下“订购”按钮时,如何为用户提供新的时间?

2 个答案:

答案 0 :(得分:0)

当页面第一次加载时,Razor代码只执行一次。之后,每次切换模态弹出窗口时,它只显示/隐藏相同的HTML。一旦单击按钮打开模态,解决方案就是更新HTML。您可以使用JQuery的load()方法来实现此目的。

首先,您需要使用JavaScript来切换Modal而不是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')
  });
})

我还没有测试过上面的代码,可能需要很少的拼写错误修正。如果它不起作用,请告诉我。

答案 1 :(得分:0)

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

ModelState.Clear();

或者

ModelState.Remove("myChangeValue");

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

中查找更多信息

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

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