【问题标题】:How to update a textarea in the current view on Submit in ASP.net MVC 3?如何在 ASP.net MVC 3 中提交的当前视图中更新文本区域?
【发布时间】:2011-08-16 15:48:04
【问题描述】:

我有一个包含两个下拉列表的页面,根据这两个列表的选择,我想在按下提交按钮时使用一些数据填充文本区域。

我在调试时看到的行为是页面被渲染,我做出选择并按下提交。 DataAccess 返回正确的结果,View 返回,但有一个例外“没有具有键 'People' 的 'IEnumerable' 类型的 ViewData 项。

我可以看到我可以重新设置下拉列表,但感觉好像我处理不正确。在 MVC 3 中是否有另一种方法可以执行此类操作?

 public ActionResult Test()
    {
        //People for dropdownlist 1
        var db = peopleRepository.People;
        var query = db.Select(c => new {c.Id, c.Name});
        ViewBag.People = new SelectList(query.AsEnumerable(), "Id", "Name");

        //Elements for dropdownlist 2
        var list = new Dictionary<string, string> {{"1", "Name"}, {"2", "Address"}, {"3", "Zip"}};
        ViewBag.Elements = new SelectList(list, "Key", "Value");

        return View();
    }

 // This part is what I'm confused about.
[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Test(string people, string elements)
    {
        if (ModelState.IsValid)
        {
            // Output from persistent storage query
            var da = new DatabaseAccess(people, elements);
            ViewBag.Results = da.Execute();

        }
        return View();
    }

查看:

@using (Html.BeginForm("Test", "Home", FormMethod.Post))

{ @Html.DropDownList("People", (SelectList)ViewBag.People, "--Select One--") @Html.DropDownList("Elements", (SelectList)ViewBag.Elements, "--Select One--") @Html.TextArea("结果", (string)ViewBag.Results, 10, 120, "") }

【问题讨论】:

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


【解决方案1】:

这是我快速构建它的方法:

型号:

   public class People
   {
      public int Id { get; set; }
      public string Name { get; set; }
   }

ViewModel(视图所需的一切):

   public class TestViewModel
   {

      public int SelectedPeopleId { get; set; }

      public string SelectedElementId { get; set; }

      public SelectList People { get; set; }
      public SelectList Elements { get; set; }
      public String Results { get; set; }

   }

Controller(使用Index作为默认Action,为视图模型创建一个可以适应的init函数)到更合适的任何东西:

public class HomeController : Controller
   {

      private static TestViewModel InitTestVM()
      {
         //People for dropdownlist 1
         var db = new List<People>();//peopleRepository.People;
         db.Add(new People { Id = 1, Name = "Name 1" });
         db.Add(new People { Id = 2, Name = "Name 2" });
         var query = db.Select(c => new { c.Id, c.Name });

         //Elements for dropdownlist 2
         var list = new Dictionary<string, string> { { "1", "Name" }, { "2", "Address" }, { "3", "Zip" } };


         TestViewModel testVM = new TestViewModel
         {
            People = new SelectList(query.AsEnumerable(), "Id", "Name"),
            Elements = new SelectList(list, "Key", "Value")
         };
         return testVM;
      }

      public ActionResult Index()
      {
         return View(InitTestVM());
      }

      // This part is what I'm confused about.
      [AcceptVerbs(HttpVerbs.Post)]
      public ActionResult Index(TestViewModel testVM)
      {
         var vm = InitTestVM();
         if (ModelState.IsValid && testVM != null)
         {
            ModelState.Clear();
            // Output from persistent storage query
            //var da = new DatabaseAccess(people, elements);
            vm.Results = "sfdfsdfsdfsdfsdfsdfsdfsdf";//da.Execute();
            vm.SelectedElementId = testVM.SelectedElementId;
            vm.SelectedPeopleId = testVM.SelectedPeopleId;
            return View(vm);
         }
         return View(vm);
      }
   }

最后是视图:

@model ViewModels.TestViewModel

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{ 
   @Html.DropDownListFor(m => m.SelectedPeopleId, Model.People, "--Select One--") 
   @Html.DropDownListFor(m => m.SelectedElementId, Model.Elements, "--Select One--") 
   @Html.TextAreaFor(m => m.Results, 10, 120, "") 
   <input type="submit" value="Test" />
}

【讨论】:

  • 这真的很有帮助,我遇到的一个问题是:“没有为此对象定义无参数构造函数。” Post Action 抛出异常。
  • 只是我上面的一个错字^非常感谢!真的很有帮助。
猜你喜欢
  • 2022-01-02
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2011-08-07
  • 2011-08-16
相关资源
最近更新 更多