按钮点击访问控制器方法

时间:2013-12-30 15:18:18

标签: c# asp.net-mvc-4

我是C#和MVC的新手,而我理解Controller和Model方面。我在访问控制器中的方法时遇到问题,以便进行简单的转换,然后我可以返回到我的View。

我的控制器:

public class Exercise05Controller : Controller
    {
        //
        // GET: /Exercise05/

        public ViewResult Index()
        {
            return View();
        }


        public ActionResult GramsToOunces(double? grams)
        {
            ViewData["grams"] = grams;
            ViewData["ounces"] = (grams * 0.035d);
            if (grams < 5)
            {
                return RedirectToAction("Index", "Home");
            }
            else if (grams > 5)
            {
                return View("GramsToOunces");
            }
            return RedirectToRoute(new
            {
                controller = "Exercise05",
                action = "Index"
            });
        }
    }

我的索引视图:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
<form action="/Exercise05/GramsToOunces" method="post">

    <input name="grams" type="text" placeholder="Insert grams to convert to ounces" />

    <input type="submit" value="Convert Grams to Ounces" />
</form>

My GramsToOunces View:

@{
    ViewBag.Title = "Index";
}    
<h2>GramsToOunces</h2>
<!-- Currently nothing else here -->

我相信我的问题正在这个问题上出现; action="/Exercise05/GramsToOunces"。使用调试向我展示了控制器处理所有信息并准备好返回视图突然不返回任何内容。我希望进行简单的转换,然后将其作为视图返回。有人能够指出我哪里出错了吗?

4 个答案:

答案 0 :(得分:0)

只要视图的名称与控制器操作的名称相同,请尝试:

@using (Html.BeginForm())
{
    <input name="grams" type="text" placeholder="Insert grams to convert to ounces" />

    <input type="submit" value="Convert Grams to Ounces" />
}

答案 1 :(得分:0)

这只是一个完整性检查,但您使用的是return View("GramsToOunces", "ounces");行。根据文档http://msdn.microsoft.com/en-us/library/dd470743(v=vs.118).aspx,第一个字符串是视图名称,第二个字符串是母版页。你有一个名为“盎司”的母版页吗?如果没有那可以解释为什么没有结果返回。也许您想使用return View("GramsToOunces");

答案 2 :(得分:0)

如果您只想进行转换并向用户显示结果。只是让它变成Ajax化。不要发布整个表单。进行ajax调用并获取结果并将其显示给用户。

假设您已将jQuery加载到表单中。

@using(Html.BeginForm("GramsToOunce","Exercise5"))
{
    <input name="grams" id="gram" type="text" placeholder="Insert grams" />
    <input type="submit" id="btnSubmit" value="Convert Grams to Ounces" />
    <div id="result"></div>
}
<script type="text/javascript">
 $(function(){
   $("#btnSubmit").click(function(e){
      e.preventDefault();
      var url=$(this).closest("form").attr("action");
      $.post(url,{ grams : $("#gram").val()} ,function(res){
          $("#result").html(res);
      });
   });
 });
</script>

让我们确保我们的action方法返回值。

[HttpPost]
public string GramsToOunces(double? grams)
{
   var result=grams * 0.035d;
   return result.ToString();
}

此外,如果您只是想进行乘法,只需在客户端(javascript)进行。无需服务器调用。

答案 3 :(得分:0)

根据documentation这一行:

return View("GramsToOunces", "ounces");

尝试使用指定的母版页返回视图。但是,似乎项目中没有母版页“盎司”。所以你最需要的就是:

return View("GramsToOunces");

请注意,您无需传递任何模型,因为您已使用ViewData