MVC C# modal popup

后端 未结 2 1007
被撕碎了的回忆
被撕碎了的回忆 2020-12-31 16:03

ok so i\'m trying to figure out how to properly call a modal popup for my page using Controllers as per this post\'s suggestion

ASP.NET MVC modal dialog/popup best p

相关标签:
2条回答
  • 2020-12-31 16:10
    $('#CheckGtd').click(function () {
        if ($(this).is(":checked"))
            $("#tbValuationDate").attr("disabled", false);
        else
            $("#tbValuationDate").attr("disabled", "disabled");
    });
    
    0 讨论(0)
  • 2020-12-31 16:28

    You could use the jquery UI Dialog for the popup. Let's have a small setup here.

    We would have a view model for the main form:

    public class MyViewModel
    {
        public string ValueId { get; set; }
        public IEnumerable<SelectListItem> Values 
        { 
            get 
            {
                return new[]
                {
                    new SelectListItem { Value = "1", Text = "item 1" },
                    new SelectListItem { Value = "2", Text = "item 2" },
                    new SelectListItem { Value = "3", Text = "item 3" },
                };
            } 
        }
    
        public string NewValue { get; set; }
    }
    

    a controller:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new MyViewModel());
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            return Content("thanks for submitting");
        }
    }
    

    and a view (~/Views/Home/Index.aspx):

    <%@ Page 
        Language="C#" 
        MasterPageFile="~/Views/Shared/Site.Master" 
        Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>" 
    %>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    
        <% using (Html.BeginForm()) { %>
            <%= Html.DropDownListFor(x => x.ValueId, Model.Values) %>
            <br/>
            <%= Html.EditorFor(x => x.NewValue) %>
            <%= Html.ActionLink("Suggest Value", "New", "NewValue", null, new { id = "new-value-link" }) %>
            <button type="submit">OK</button>
        <% } %>
    
        <div id="dialog"></div>
    
    </asp:Content>
    

    then we could take care for the popup. We define a view model for it:

    public class NewValueViewModel
    {
        public string Foo { get; set; }
        public string Bar { get; set; }
    }
    

    a controller:

    public class NewValueController : Controller
    {
        public ActionResult New()
        {
            return PartialView(new NewValueViewModel());
        }
    
        [HttpPost]
        public ActionResult New(NewValueViewModel model)
        {
            var newValue = string.Format("{0} - {1}", model.Foo, model.Bar);
            return Json(new { newValue = newValue });
        }
    }
    

    and a corresponding partial view (~/Views/NewValue/New.ascx):

    <%@ Control 
        Language="C#" 
        Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.NewValueViewModel>" 
    %>
    
    <% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "new-value-form" })) { %>
        <%= Html.EditorFor(x => x.Foo) %>
        <%= Html.EditorFor(x => x.Bar) %>
        <button type="submit">OK</button>
    <% } %>
    

    Now all that's left is to write a bit of javascript to wire everything up. We include jquery and jquery ui:

    <script src="<%: Url.Content("~/Scripts/jquery-1.5.1.min.js") %>" type="text/javascript"></script>
    <script src="<%: Url.Content("~/Scripts/jquery-ui-1.8.11.js") %>" type="text/javascript"></script>
    

    and a custom javascript file that will contain our code:

    $(function () {
        $('#new-value-link').click(function () {
            var href = this.href;
            $('#dialog').dialog({
                modal: true,
                open: function (event, ui) {
                    $(this).load(href, function (result) {
                        $('#new-value-form').submit(function () {
                            $.ajax({
                                url: this.action,
                                type: this.method,
                                data: $(this).serialize(),
                                success: function (json) {
                                    $('#dialog').dialog('close');
                                    $('#NewValue').val(json.newValue);
                                }
                            });
                            return false;
                        });
                    });
                }
            });
            return false;
        });
    });
    
    0 讨论(0)
提交回复
热议问题