0

基本的に、AJAX リクエストを通じて部分ビューを返そうとしています。ただし、問題は、現在のページのコンテンツを置き換えるのではなく、ページが部分ビューにリダイレクトされることです。

AJAX リクエストを送信するビューは次のとおりです。

@model MediaProfits.Models.DomainEntities.ProtectedPassword

@Scripts.Render("~/Scripts/CustomScripts/LeadChecker.js")
@{
    ViewBag.Title = "Unlock " + @Model.Name;
}

<h2>Unlock @Model.Name</h2>

<button onclick="StartCheckingLead('@Model.SubId');">Start Checking</button>

@using (Ajax.BeginForm("Lead", "Check", 
    new AjaxOptions() 
    { 
        HttpMethod = "get", 
        InsertionMode = InsertionMode.Replace, 
        UpdateTargetId = "password" 
    })) 
{
    @Html.HiddenFor(m => m.SubId) 
    <input type="submit" value="Check For Completion" />
}

@Html.Partial("_Password", "")

部分ビューを返すコントローラー アクションは次のとおりです。

public PartialViewResult Lead(string subId)
    {
        var lead = db.Leads.Where(l => l.SubId == subId);
        if (lead.ToList().Count > 0)
        {
            return PartialView("~/Views/Passwords/_Password.cshtml", "unlocked...");
        }
        else
        {
            return PartialView("~/Views/Passwords/_Password.cshtml", "");
        }
    }

そして、ここに部分的なビューがあります (ページがリダイレクトされるようになりました):

@model System.String
<div id="password">
    <label>Password:</label>
    <label>@Model</label>
</div>

最後に、BundleConfig.cs ファイルを次に示します。

using System.Web;
using System.Web.Optimization;

namespace MediaProfits
{
    public class BundleConfig
    {
        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));

            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
        }
    }
}

部分ビューを現在のページに挿入して、リダイレクトしないようにします。

4

1 に答える 1

1

ページにスクリプトが含まれていることを確認jquery.unobtrusive-ajax.jsしてください (jquery の後):

<script type="text/javascript" src="@Url.Content("~/scripts/jquery.unobtrusive-ajax.js")"></script>

~/bundles/jqueryvalバンドルを使用しているため、ビューのスクリプト セクションにバンドルを含めることができます。

@section scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

scriptsこれは明らかに、レイアウトでこのセクションが定義されていることを前提としています。

    ...
    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
于 2013-06-28T10:48:50.117 に答える