繁体   English   中英

为什么在 ASP.NET MVC 中的 HttpPost Action 之后 PartialView 不可见?

[英]Why PartialView is not visible after HttpPost Action in ASP.NET MVC?

我正在开发一个使用 ASP.NET MVC 5、C#、Razor 的解决方案。

问题:

我有一个观点,保存后不会查看局部视图的内容,我只能看到描述字段的文本框控件。

看法

@Html.HiddenFor(m=>m.Items)
@Html.Partial("~/Areas/Checks/Views/Shared/_ViewerItems.cshtml", Model.Items)

@Html.TextBoxFor(m => m.Description, new { @class = "form-control" })



@{
    var len = Request.RawUrl.Split('/').Count();
    var viewname = Request.RawUrl.Split('/')[len - 1];
    var _newprefixbuttoname = "Salva"+viewname;
    var _newprefixbuttonameProsegui = "Salva" + viewname+"Prosegui";
    //
    if (SessionManager.IsUserConnected(Xanta.ServiceLayer.BO.Ruoli.IsRole411))
    {
        <!-- saving buttons -->
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10 text-right">
                <input type="submit" name="@_newprefixbuttoname" value="Salva" class="btn btn-lg btn-info" />
                <input type="submit" name="@_newprefixbuttonameProsegui" value="Salva e prosegui" class="btn btn-lg btn-success" />
            </div>
        </div>
    }


}

——

——

PS:使用的post方法与其他视图中使用的相同,但在这种情况下会出现此问题。 反正我给你看

来源

[HttpPost]
[ValidateAntiForgeryToken]
[HttpParamAction]
public ActionResult SaveData(Valutation mv)
{
    return savingDataValutation(mv);
}

private ActionResult savingDataValutation(Valutation mv, bool goon = false)
{
    if (!ModelState.IsValid)
        return View(mv);

    var responseData = manager.savingDataValutation(base.getCurrentCompany(), mv);
    if (responseData.Error)
        ModelState.AddModelError("", responseData.Message);

    if (goon)
        return RedirectToAction(nextpage);

    setSuccessMessage();
    return View(mv);
}

局部视图

@using System.Web.UI.WebControls
@model Xanta.Areas.Checks.ViewModels.ViewerVerificheViewModel
@{
    bool allrespnull = Model.Items.Count() == Model.Items.Count(x => x.RispostaValue == null);
    var dropDownBMMA = new List<ListItem> 
        { 
              new ListItem { Text = "Bassa", Value = "B" }, 
              new ListItem { Text = "Medio Bassa", Value = "MB" } ,
              new ListItem { Text = "Medio Alta", Value = "MA" } ,
              new ListItem { Text = "Alta", Value = "A" } 
        };
}
<style>
    .colrisp{
        width: 100px;
        text-align:center;
    }
    .norisp{
        color:red;
    }
</style>

<table class="table table-bordered table-hover table-striped">
    <tbody>
        @for (int i = 0; i < Model.Items.Count; i++)
        {
            if (Model.Items[i].Visible)
            {
                <tr @{ if (!allrespnull && Model.Items[i].TipoRisposta != 1 && Model.Items[i].TipoRisposta != 6 && Model.Items[i].RispostaValue == null) { <text> class="norisp" </text>         } }>
                    <td>
                        <b>&#8226;</b>
                        @*@Html.DisplayFor(m => m.Items[i].VerificaTesto)*@
                        @Html.Raw(Model.Items[i].VerificaTesto)
                        @Html.HiddenFor(m => m.Items[i].idVerifica)
                        @Html.HiddenFor(m => m.Items[i].VerificaTesto)
                    </td>
                    @if ((Model.Items[i].TipoRisposta == 2) || (Model.Items[i].TipoRisposta == 3) || (Model.Items[i].TipoRisposta == 5))
                    {
                        <td class="colrisp">
                            @Html.Label("Si")
                            @Html.RadioButtonFor(m => m.Items[i].RispostaValue, "S", new { @id = "rbSi" + i.ToString() })
                        </td>
                        <td class="colrisp">
                            @Html.Label("No")
                            @Html.RadioButtonFor(m => m.Items[i].RispostaValue, "N", new { @id = "rbNo" + i.ToString() })
                        </td>
                    }
                    @if (Model.Items[i].TipoRisposta == 3)
                    {
                        <td class="colrisp">
                            @Html.Label("Non pert")
                            @Html.RadioButtonFor(m => m.Items[i].RispostaValue, "NP", new { @id = "rbNP" + i.ToString() })
                        </td>
                    }
                    @if (Model.Items[i].TipoRisposta == 4)
                    {
                        <td class="colrisp">
                            @*@Html.EditorFor(m => m.Items[i].RispostaValue, "NP", new { @id = "txt" + i.ToString(), @class = "form-control" })*@
                            @Html.TextBoxFor(m => m.Items[i].RispostaValue, new { @class = "form-control", @id = "txt" + i.ToString() })
                        </td>
                    }
                    @if (Model.Items[i].TipoRisposta == 5)
                    {
                        <td class="colrisp">
                            @Html.Label("Non valutabile")
                            @Html.RadioButtonFor(m => m.Items[i].RispostaValue, "NV", new { @id = "rbNV" + i.ToString() })
                        </td>
                    }
                    @if (Model.Items[i].TipoRisposta == 7)
                    {
                        <td class="colrisp">
                            @Html.DropDownListFor(m => m.Items[i].RispostaValue, new SelectList(dropDownBMMA, "Value", "Text", Model.Items[i].RispostaValue), "", new { @id = "ddl7_" + i.ToString() })
                        </td>
                    }
                    @if (Model.Items[i].TipoRisposta == 8)
                    {
                        <td class="colrisp">
                            @Html.CheckBoxFor(m => m.Items[i].CheckBoxValue, new { @id = "chk8_" + i.ToString() })
                        </td>
                    }

                </tr>
                if (Model.Items[i].TipoRisposta == 6)
                {
                    <tr>
                        <td class="colrisp">
                            @Html.TextAreaFor(m => m.Items[i].RispostaValue, new { @class = "form-control", @rows = 8, placeholder = @Model.Items[i].PlaceHolder, style = "max-width:100% !important;" })
                        </td>
                    </tr>
                }

            }
        }
    </tbody>
</table>

局部视图在其他情况下效果很好! 但我不明白出了什么问题。

有什么建议? 谢谢

(你为什么要降低我的声望……我怕下次再写新帖!)

很可能是因为网络是无状态的,所以当您最初加载页面时(通过 HTTPGET),您将所有项目加载到您的“mv”中。 当您发布帖子(通过 HTTPPOST)时,项目列表并未与您的“mv”一起发布,因此您需要在返回视图之前重新填充“mv”项目。

暂无
暂无

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

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