将对象从javascript发送到MVC中的操作方法

时间:2013-03-25 22:08:37

标签: jquery asp.net-mvc http-post

我正在尝试将一个对象从剃刀视图发送到一个动作方法

我的观点

    <section>
 <script type="text/javascript">
function saveExpense()
    {
        var expenseobject = {
            date:$('.txtDate').val() ,
            type:$('.ExpenseType').val() ,
            cost: $('.cost').val(),
            extra:$('.extra').val()

        };

        $.ajax({
            //   url: baseUri+'HomeController/saveexpense',
            url: '@Url.Action("saveexpense", "HomeController")',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({ obj: expenseobject }),
            success: function (result) {


            }
        });

}
</script>
<section id="form">
    <table width="600">
        <tr>
            <td>Select Date:</td>
            <td>
                <input class="txtDate" type="date" size="20"></td>
        </tr>
        <tr>
            <td>Select Expense Type:</td>
            <td>
                <select class="ExpenseType">
                    <optgroup label="Room">
                        <option>Room Fare</option>
                    </optgroup>

                    <optgroup label="Mess">
                        <option>Monthly Mess</option>
                    </optgroup>

                    <optgroup label="Others">
                        <option>Bus Fare</option>
                        <option>Tapari</option>
                        <option>Mobile Recharge</option>
                        <option>Auto</option>
                    </optgroup>
                </select></td>
        </tr>
        <tr>
            <td>Enter Cost:</td>
            <td>
                <input  class="cost" type="text" size="45" /></td>
        </tr>
        <tr>
            <td>Extra Details:</td>
            <td>
                <input class="extra" type="text" size="45" /></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>
                <button  onClick="saveExpense();" >Submit</button></td>
        </tr>
    </table>
</section>
    </section>

这是我的控制器

   public ActionResult saveexpense(Expense obj)
        {
            obj.ExpenseId = Guid.NewGuid();
            Debug.Print(obj.cost.ToString());
            if (ModelState.IsValid)
            {
                context.expenses.Add(obj);
                context.SaveChanges();
                int total = context.expenses.Sum(x => x.cost);
                return Json(new { spent = total, status = "Saved" });

            }

                return Json(new { status = "Error" });
        }

它在HomeController.cs中的位置

当我检查响应时,我找到了

[HttpException]:未找到路径'/ HomeController / saveexpense'的控制器或未实现IController。

1 个答案:

答案 0 :(得分:2)

指定Url.Action助手的控制器名称时,只需指定不带单词Controller的控制器名称,类似于:

url: '@Url.Action("saveexpense", "Home")',

假设你的其余代码都没问题,那应该可行。