开始学习ToDoList的MVC

时间:2013-01-15 20:43:31

标签: asp.net-mvc

不久前,我在这里寻求关于我在jQuery中创建的ToDoList的帮助。尽管如此,我还是设法尽我所能完成了这项工作。我已经看过一些教程并在书上学了几课,但我仍然不明白。我完全理解的是关注点的分离(在大学里学到的)。我想,一旦我学会使用它,我会喜欢它。所以,我遇到的问题可能很简单。

我知道如何制作视图和控制器,以及如何将它们“链接”在一起。我也知道ViewBag(我可以添加非常聪明),但我不知道如何使模型出现在视图中。我做过这样的课程,但也许我在这里错过了一些东西。

任何帮助都会很棒!

感谢。

顺便说一句,这是我的代码:

ToDoListController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using MvcMovie.Models;

namespace MvcMovie.Controllers
{
    public class ToDoListController : Controller
    {
        //
        // GET: /ToDoList/

        public ActionResult Index(ToDoList model)
        {
            return View(model);
        }

    }
}

ToDoListModels:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcMovie.Models
{
    public class ToDoList
    {
        public int ListID { get; set; }
        public String TaskName { get; set; }
        public string Description { get; set; }
        public string Name { get; set; }
    }
}

2 个答案:

答案 0 :(得分:2)

你尝试发送json的数据吗? 如果使用这些字段创建视图,则可以通过json发送数据。

例如

@using(Html.BeginForm("ToDoList","IndexResponse",new{Model.ListID}))
{
   @Html.EditorFor(model => model.TaskName)
...
}

public ActionResult IndexResponse(ToDoList model)
{
    return View(model);
}

答案 1 :(得分:0)

答案很简单。您在Action方法上方缺少[HttpPost]属性。

  

但我不知道如何让模型出现在视图中。

当你有一些模特例如:

public class TestViewModel
{
    public int TestId { get; set; }
    public string TestStringProperty { get; set; }
}

如果您希望在视图和控制器之间进行双向通信,则必须以html格式创建视图 - 这是您从视图与服务器通信的方式。

@model NamespaceOfYourModel.TestViewModel

@using(Html.BeginForm("TestAction", "ToDoListController", FormMethod.Post))
{
    @Html.HiddenFor(m => m.TestId)
    @Html.LabelFor(m => m.TestStringProperty)
    @Html.EditorFor(m => m.TestStringProperty)

    <input type="submit" name="submitForm" value="Save" />
}

现在你必须编写两种方法:首先将新模型对象发送到视图,然后在提交表单时获取从视图传递的模型。

public ActionResult TestAction()
{
    //creating new object of your model
    TestViewModel testModel = new TestViewModel();

    //it will be 1 in the second method too
    testModel.TestId = 1;
    //passing model to the view
    return View(testModel);
}

//You say you want that method to be called when form is submited 
[HttpPost]
public ActionResult TestAction(TestViewModel testModel)
{
    if(testModel != null)
    {
        //you will see that the testModel will have value passed in a view
        var imNotNull = testModel;
    }
}