用于在剃刀中调用函数的html输入值

时间:2014-11-12 09:36:19

标签: c# html angularjs razor

我一直在面对这个问题。我找不到任何可以帮助解决这个问题的文章。以下是代码和输出的屏幕截图:

网络界面

enter image description here

代码段

enter image description here

如何传递此输入的值:

<input type="text" id="ProjectName" name="ProjectName" class="form-control" />

到剃须刀召唤的一个参数:

Report.GenerateReport("project name here", "from date here","to date here");

也欢迎角度解决方案。谢谢!

3 个答案:

答案 0 :(得分:4)

如果您使用的是RazorWebPages,那么您只需要将方法属性添加到表单格式

<form method="post" class="form-horizontal">

然后您的以下代码将正常运行

 @{
    Report.GenerateReport(Request["ProjectName"], "from date here","to date here");
 }

但是需要将你的FromMonth和FromYear字段转换为DateTime并检查项目名称是否存在其他明智的Report.GenerateReport函数抛出异常,所以你可以将其写为

@{
     var porjectName = Request["ProjectName"];
     if (!string.IsNullOrEmpty(porjectName ))
     {
         var fromDate = DateTime.Parse(string.Format("{0}-{1}-{2}", Request["FromYear"], Request["FromMonth"], 1));
         var toDate = DateTime.Parse(string.Format("{0}-{1}-{2}", Request["ToYear"], Request["ToMonth"], 1));
         Report.GenerateReport(porjectName, fromDate, toDate);
     }
 }

您可以在http://www.asp.net/web-pages/overview/getting-started/introducing-aspnet-web-pages-2/form-basics

找到有关asp.net razor网页的更多信息

或者,如果您使用的是Asp.net Mvc,那么您需要编写Get / Post Actions。在Get Action中,您将初始化视图,通过Submit按钮,您将点击Post Action,其中最佳方法是在名为Model / ViewModel的包装类中加载值,然后将该模型传递给Report.GenerateReport方法。 / p>

控制器类:

public class ReportGeneratorController : Controller
{
    [HttpGet]
    public ActionResult ProjectReport()
    {
        return View();
    }

    [HttpPost]
    public ActionResult ProjectReport(ReportParamModel model)
    {
        return View(model);
    }

}

你的模特

public class ReportParamViewModel 
{
    public string ProjectName {get;set;}
    public int FromMonth {get;set;}
    public int FromYear {get;set;}
    public int ToMonth {get;set;}
    public int ToYear {get;set;}

    public DateTime GetFromDate()
    {
        return new DateTime(FromYear, FromMonth, 1);
    }

    public DateTime GetToDate()
    {
        return new DateTime(ToYear, ToMonth, 1);
    }
}

您的观点或cshtml文件

@Model ReportParamViewModel 

<!-- your current html -->
@{
     Report.GenerateReport(model.ProjectName, model.GetFromDate(),model.GetToDate());
}

您可以找到有关Asp.net Mvc @ http://www.asp.net/mvc/overview/getting-started

的更多信息

答案 1 :(得分:1)

你去:

Report.GenerateReport(Request["ProjectName"], "from date here","to date here");

请求[&#34; ProjectName&#34;]应该获得您的输入值。

您的代码中也存在此问题:

<form class="form-horizontal">

您需要添加&#34;操作&#34;属性到表单。例如:

<form action="ControllerName/ActionName" class="form-horizontal">

答案 2 :(得分:1)

在Razor中执行此操作的标准方法是使用MVC HtmlHelper类。

@using(Html.BeginForm("GenerateReport", "Report", new { projectname = Model.ProjectName, fromMonth =  Model.FromMonth , toMonth = Model.ToMonth }, FormMethod.Post))
{
//put your Input Fields here
}

你可能没有模特。在这种情况下,您仍然可以通过删除参数来使用上述代码:

@using(Html.BeginForm("GenerateReport", "Report", FormMethod.Post))
{
//put your Input Fields here
}

创建一个名为Report的控制器和一个名为GenerateReport的方法。

//Place this code in ReportController.cs
 public ActionResult GenerateReport(string ProjectName, string FromDate, string ToDate)
 {
   //Add your code here
 }

那将完成这项工作。