如何从aspx切换到cshtml

时间:2015-09-16 17:11:49

标签: c# jquery angularjs asp.net-mvc razor

在我的旧应用程序中,我使用Default.aspx作为我的ui-router的布局页面。在页面底部是:

 <form runat="server" style="visibility: collapse">
    <asp:HiddenField ID="mkt" runat="server" />
    <asp:HiddenField ID="id" runat="server" />
</form>

在我的角度服务中,我带着

的值
 var market = (angular.element('#mkt').val() == '' ? this.marketAbbreviation : angular.element('#mkt').val());
 var id = (angular.element('#id').val() == '' ? this.sessionGuid : angular.element('#id').val());

两者都是在模态启动时从地图应用程序传递的字符串值。我已经完成了搜索,这似乎是一个常见的问题。这就是我想要的工作。

Index.cshtml

@model SubjectProperty.Web.Controllers.MKT

@Html.HiddenFor(x => x.mkt, new { htmlAttributes = new { @id = "mkt" } })
@Html.HiddenFor(x => x.id, new { htmlAttributes = new { @id = "id" } })

在我的家庭控制器中

  public class MKT
{
    public string mkt { get; set; }
    public string id { get; set; }
}

public class HomeController : Controller
{
    public ActionResult Index(MKT m)
    {
        if (m == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        var model = new MKT();

        model.id = m.id;
        model.mkt = m.mkt;

        return View(model);
    }
  }

现在我手动插入

  

本地主机:1323 / MKT =湿和ID = dd23e460-e319-47c9-b9c4-rr5r6798e56t

它拾起并起作用。我需要做什么?

更新,意识到剃刀hiddenFor没有从控制器获取值。这是一个截图。 pic

2 个答案:

答案 0 :(得分:1)

尝试将隐藏的表单字段包装在表单中:

using(Html.BeginForm()
{
  @Html.HiddenFor(x => x.mkt, new { htmlAttributes = new { @id = "mkt" } })
  @Html.HiddenFor(x => x.id, new { htmlAttributes = new { @id = "id" } })
}

并使用[HttpPost]属性标记您的方法:

 [HttpPost]
 public ActionResult Index(MKT model)
 {
 }  

如果您想使用更高级的方案,请考虑自定义模型绑定器。

答案 1 :(得分:1)

将HiddenFor内容包含在某种形式(HTML,Ajax ...)中,并在控制器方法的签名中获取表单元素集合,如:public ActionResult Index(FormCollection _collection)

使用[AcceptVerbs(HttpVerbs.Post)]

为方法添加前缀