繁体   English   中英

将复杂类型传递给Bootstrap模式

[英]Pass complex type to Bootstrap modal

该项目是ASP MVC 6应用程序。 我正在尝试将类对象传递给Bootstrap模式对话框。 我阅读了一些文章,描述了如何使用JQuery脚本将数据传递给模式对话框。 这些例子涵盖了传递简单数据类型,如int或string值,但我的运气无法获得具有复杂类型的数据类型。

作为一种解决方法,我尝试将类对象序列化为json字符串,并可以成功将其传递给模式对话框(提供的代码片段)。 但是,我坚持将json反序列化为ViewModel对象,并使用模态对话框中的对象值进一步更新控件。 有人可以提供解决问题的方向吗?

HTML(ASP Razor视图)

<button role="button" data-toggle="modal" data-target="#updateModal" data-dataid=@JsonHelper.SerializeObject(@item) />

JQuery脚本

$("#updateModal").on('show.bs.modal', function (e) {
    var dataid = e.relatedTarget.dataset.dataid;

    //populate the textbox - to test data is passed properly
    $(e.currentTarget).find('textarea[name="dataidval"]').val(dataid);
 });

我是在正确的道路上实现我想要的吗? 任何更好/替代解决方案?

我试了一下,可以实现我想要的。 我仍然渴望找到更好的解决方案。 我试图解释一下对我有用的东西。

对我有用的解决方案是,对json对象(复杂类型)进行反序列化,并在模态show callback事件中单独将值分配给控件。 控件的name属性应与ViewModel类型匹配,以获取表单提交中的值。 如果您不希望将复杂类型传递给Action方法,则仍可以将这些值作为控件的名称 - 值对单独提交。

JQuery脚本

$("#updateModal").on('show.bs.modal', function (e) {

    var dataid = e.relatedTarget.dataset.dataid;

    //deserialize json
    var dataObject = JSON.parse(dataid);

    //populate the controls with values        
    $(e.currentTarget).find('input[name="ViewModel.ID"]').val(dataObject.ID);
    $(e.currentTarget).find('input[name="ViewModel.Name"]').val(dataObject.Name);
    $(e.currentTarget).find('input[name="ViewModel.PropertyA"]').val(dataObject.PropertyA);
    $(e.currentTarget).find('input[name="ViewModel.PropertyB"]').val(dataObject.PropertyB);
 });

HTML(引导模式)

<!-- minimal code for the sake of clarity -->
@model ViewModel

<form asp-controller="XYZController" asp-action="@nameof(XYZController.Update)" asp-route-returnurl="@ViewData["ReturnUrl"]"
  method="post" class="form-horizontal" role="form">

  <div class="form-group">

        <input asp-for="@Model.ID" name="ViewModel.ID" class="hidden" />
        <!-- asp-for attributes may not have any effect in this case-->
        <input class="form-control" asp-for="@Model.Name" name="ViewModel.Name" />
        <input class="form-control" asp-for="@Model.PropertyA" name="ViewModel.PropertyA" />
        <input class="form-control" asp-for="@Model.PropertyB" name="ViewModel.PropertyB" />

  </div>
</form>

ASP MVC控制器

    [HttpPost]
    public IActionResult Update(ViewModel viewModel)
    {
        return View();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM