用于在Html.BeginForm中包装一些html的条件逻辑

时间:2011-08-12 05:15:27

标签: asp.net-mvc razor

我有一个看起来像这样的剃刀视图

@using(Html.BeginForm(MVC.Account.Info()))
{
    <p>blah blah blah</p>

    <input type="submit" value="Submit!" />
}

现在我只想呈现表单并提交User.Identity.IsAuthenticated

如果缩进级别很重要,那可能看起来像这样

@if(User.Identity.IsAuthenticated) // wraps the using and its open brace
{
    @using(Html.BeginForm(MVC.Account.Info()))
    {
}

        <p>blah blah blah</p>

@if(User.Identity.IsAuthenticated) // wraps the input and the using closing brace
{
        <input type="submit" value="Submit!" />
    }
}

但是,当然,这种语法不起作用。有人知道这样做的好方法吗?

3 个答案:

答案 0 :(得分:5)

最终使用了剃刀助手。我认为这是最好的方法,如果你有一个好的方法,仍然不介意看到替代方案

@helper Info()
{
   <p>blah blah blah</p>
}

@if(User.Identity.IsAuthenticated)
{
    using(Html.BeginForm(MVC.Account.Info()))
    {
        @Info()
        <input type="submit" value="Submit!" />
    }
}
else
{
    @Info()
}

答案 1 :(得分:1)

@if(User.Identity.IsAuthenticated)
{
    @using(Html.BeginForm(MVC.Account.Info()))
    {
        <p>blah blah blah</p>
        <input type="submit" value="Submit!" />
    }
}
else
{
    <p>blah blah blah</p>
}

如果您真的不想重复自己,可以使用javascript在表单中移动<p>(如果存在)。

答案 2 :(得分:0)

如果您自己处置该成员,则可以删除using

@{
   MvcForm htmlForm = null;
   if (User.Identity.IsAuthenticated)
   {
      //render the begin of a <form> tag
      htmlForm = Html.BeginForm(MVC.Account.Info());
   }
}

@* content goes here *@
<p>blah blah blah</p>

@if (htmlForm != null)
{
   //render the end of </form>
   <input type="submit" value="Submit!" />
   htmlForm.EndForm();
}