使用jQuery选项卡向MVC4控制器发送字符串参数

使用jQuery选项卡向MVC4控制器发送字符串参数,jquery,c#-4.0,razor,asp.net-mvc-4,Jquery,C# 4.0,Razor,Asp.net Mvc 4,我有一个MVC4 razor view index.cshtml,其中包含以下jQuery生成的选项卡链接: <div id="tabs"> <ul> @foreach (var item in Model) { <li><a href="/MetaData/Edit?Name=@item.Name">@item.DisplayName</a></li> } </ul> &l

我有一个MVC4 razor view index.cshtml,其中包含以下jQuery生成的选项卡链接:

<div id="tabs">
<ul>
    @foreach (var item in Model)
    {
       <li><a href="/MetaData/Edit?Name=@item.Name">@item.DisplayName</a></li>
    }
</ul>
<div id="tabs-1">

</div>
</div> 
其次,每个选项卡链接的相关控制器方法如下:

    [HttpGet]
    public ActionResult Edit(string Name = "")
    {
        MetaData item = db.MetaDatas.Where(md => md.Name.Equals(Name)).Single();

        if (item == null)
        {
            return PartialView(null);
        }
        return PartialView(item);
    }
@model Data.MetaData
<div id="_metadata_content">

    <div class="message-success">@ViewBag.SuccessMessage</div>
    <div class="message-error">@ViewBag.ErrorMessage</div>

    @using (Ajax.BeginForm("Edit", "MetaData", new AjaxOptions { UpdateTargetId = "_metadata_content", HttpMethod = "POST" }
    ))
    {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>MetaData</legend>

        <h2>@Model.DisplayName</h2>

        @Html.HiddenFor(model => model.Name)
        @Html.HiddenFor(model => model.DisplayName)
        @Html.HiddenFor(model => model.AllowEdit)

        <div class="editor-field">
        @Html.TextAreaFor(model => model.Val, new { @cols = 80, @rows = 10 })
        @Html.ValidationMessageFor(model => model.Val)
        </div>
        <p>
        @if(Model.AllowEdit)
        {
            <input type="submit" value="Save"/>
        }
        </p>
    </fieldset>

    }
</div>
它通过ajax将edit.cshtml加载到tabs div中,如下所示:

    [HttpGet]
    public ActionResult Edit(string Name = "")
    {
        MetaData item = db.MetaDatas.Where(md => md.Name.Equals(Name)).Single();

        if (item == null)
        {
            return PartialView(null);
        }
        return PartialView(item);
    }
@model Data.MetaData
<div id="_metadata_content">

    <div class="message-success">@ViewBag.SuccessMessage</div>
    <div class="message-error">@ViewBag.ErrorMessage</div>

    @using (Ajax.BeginForm("Edit", "MetaData", new AjaxOptions { UpdateTargetId = "_metadata_content", HttpMethod = "POST" }
    ))
    {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>MetaData</legend>

        <h2>@Model.DisplayName</h2>

        @Html.HiddenFor(model => model.Name)
        @Html.HiddenFor(model => model.DisplayName)
        @Html.HiddenFor(model => model.AllowEdit)

        <div class="editor-field">
        @Html.TextAreaFor(model => model.Val, new { @cols = 80, @rows = 10 })
        @Html.ValidationMessageFor(model => model.Val)
        </div>
        <p>
        @if(Model.AllowEdit)
        {
            <input type="submit" value="Save"/>
        }
        </p>
    </fieldset>

    }
</div>
保存工作正常,并成功调用控制器编辑方法。返回时,将正确更新SuccessMessage和ErrorMessage值

但是,如果选择了另一个选项卡,@ViewBag.SuccessMessage和@ViewBag.ErrorMessage值不会传播到edit.cshtml。尽管这些值已正确保存到数据库中

我觉得这与jQuery选项卡链接/MetaData/Edit?Name=@item.Name的构造有关。原因是我在系统的另一部分中有一个结构相同的页面,但我使用/Controller/Action//Model.Value构建链接。由于某些原因,我无法用字符串参数来构造这样的链接,它只是作为null出现,因此我使用了?Name=@item.Name

以前有人有过类似的想法或经历过类似的问题吗