【问题标题】:C# Razor Helper Method displays Page within PageC# Razor Helper 方法在页面内显示页面
【发布时间】:2013-12-09 22:14:38
【问题描述】:

我正在创建 Razor 联系表,除了显示“成功消息”外,一切正常。我正在调用一个辅助方法 DisplayCompletionMessage()。在那我有一个标题和段落。当调用此方法时,会显示消息,但这就像我在我所在的页面中放置了一个全新的页面。就像我有两个母版页,即使该方法只显示标题和段落。

if (!isPostBack)
{
    Session.Remove(ContactFormModel.SessionKey);
    @RenderForm(formModel)
}
else
{
    if (Session[ContactFormModel.SessionKey] != null)
    {
        @DisplayResubmissionError()
        return;
    }

    formModel = new ContactFormModel(Request.Form);
    var errors = formModel.Validate();

    if (errors.Count > 0)
    {
        @DisplayErrors(errors)
        @RenderForm(formModel)
    }
    else
    {
        @DisplayCompletionMessage(formModel)
        @SendContactEmail(formModel)
    }
}

@helper DisplayCompletionMessage(ContactFormModel formModel)
{
    <h3>Thank You</h3>

    <p>
        Thank you, @formModel.Name, your message has been successfully submitted!
    </p>
}

【问题讨论】:

  • 您能否显示一些代码,很可能您正在调用视图而不是部分视图。
  • @RealityDysfunction 我添加了我用来调用辅助方法的代码,以及辅助方法代码。
  • 这段代码在你看来吗?!?!?! ....
  • @SimonWhitehead 它实际上在一个宏中。

标签: c# asp.net-mvc razor master-pages


【解决方案1】:

如何使用TempData 来显示您的消息。

在您的控制器中,您在发送电子邮件后设置 TempData

.... //other code in your controller
....
TempData["successMsg"] = "Thank you, " + User.Name + ", your message has been successfully submitted!";
....
....

如果 TempData 不为空,则在视图上检查它并显示它

@if(TempData["successMsg"] != null)
{
    <h3>Thank you</h3>
    <p>
        TempData["successMsg"].ToString()
    </p>
}

【讨论】:

  • 这行得通,但现在我意识到辅助方法并没有导致页面内的页面。我删除了与提交按钮相关的所有代码,我仍然在页面内获得重新加载和页面。这可能是由于表单上的 method="POST" 造成的吗?
  • 也许你的@SendContactEmail 辅助方法是罪魁祸首?
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
相关资源
最近更新 更多