相关疑难解决方法(0)

ASP.NET MVC DropDownList不从模型中选择值

我正在使用ASP.NET MVC 3,并且使用DropDownListForHTML Helper 遇到了"陷阱" .

我在我的控制器中执行此操作:

ViewBag.ShippingTypes = this.SelectListDataRepository.GetShippingTypes();
Run Code Online (Sandbox Code Playgroud)

GetShippingTypes方法:

public SelectList GetShippingTypes()
{
    List<ShippingTypeDto> shippingTypes = this._orderService.GetShippingTypes();

    return new SelectList(shippingTypes, "Id", "Name");
}
Run Code Online (Sandbox Code Playgroud)

我把它放在ViewBag模型中而不是模型中的原因(我为每个视图都有强类型模型)是我有一组使用EditorTemplate渲染的项目,它还需要访问ShippingTypes选择列表.

否则我需要遍历整个集合,然后分配一个ShippingTypes属性.

到现在为止还挺好.

在我看来,我这样做:

@Html.DropDownListFor(m => m.RequiredShippingTypeId, ViewBag.ShippingTypes as SelectList)
Run Code Online (Sandbox Code Playgroud)

(RequiredShippingTypeId属于类型Int32)

什么情况是,该值RequiredShippingTypeId不是在下拉选择向下.

我偶然发现了这个问题:http://web.archive.org/web/20090628135923/http : //blog.benhartonline.com/post/2008/11/24/ASPNET-MVC-SelectList-selectedValue-Gotcha.aspx

他建议ViewData当选择列表来自时,MVC将从中查找所选值ViewData.我不确定是不是这样了,因为博客文章已经过时了,他正在讨论MVC 1 beta.

解决此问题的解决方法是:

@Html.DropDownListFor(m => m.RequiredShippingTypeId, new SelectList(ViewBag.ShippingTypes as IEnumerable<SelectListItem>, "Value", "Text", Model.RequiredShippingTypeId.ToString()))
Run Code Online (Sandbox Code Playgroud)

我试着不要ToStringRequiredShippingTypeId没有选择的项目:在最后,这给了我同样的行为之前. …

asp.net-mvc-3

16
推荐指数
1
解决办法
1万
查看次数

DropDownList不尊重SelectList的Selected属性

我有以下代码行:

@Html.DropDownListFor(x => x.TimeOption, new SelectList(Model.TimeOptions, "Value", "Name", (int)Model.TimeOption))
Run Code Online (Sandbox Code Playgroud)

正确构建了下拉列表,并且选择确实是正确的但MVC不会在选择了正确的项目的情况下绘制下拉列表.标记不会在选项上输出选定的属性.

输出呈现为:

<option value="0">Past Day</option>
<option value="1">Past Week</option>
<option value="2">Past Month</option>
<option value="3">Past Year</option>
<option value="4">Start of Time</option>
Run Code Online (Sandbox Code Playgroud)

然而,如果您查看附加的屏幕截图,您可以看到它已正确选择:

观察清单

这仅影响GET,而不影响POST.想法?

c# asp.net-mvc

10
推荐指数
1
解决办法
5235
查看次数

ASP.NET MVC - 下拉列表选择 - 部分视图和模型绑定

我是ASP.NET MVC的新手,我正在努力找到最好的方法来做到这一点.这可能很简单,但我只是想做正确的事情所以我想我会问.

让我们说我的模型是这样的:

任务 - ID,描述,AssignedStaffMember

StaffMember - Id,FirstName,LastName

在我看来,我想创建一个新任务.我创建了一个强类型的Razor视图,并且可以使用EditorFor为Description创建文本框但是AssignedStaffMember呢?

我想要一个当前所有员工的下拉列表,并且可以选择一个,然后将其提交给一个动作方法 NewTask(string description, StaffMember assignedStaffMember) ,或者我可以为staffId而不是StaffMember对象提供一个int,并在动作中查找它方法.

做这个的最好方式是什么?我需要去数据库以获取员工名单,所以这就是我的想法:

  1. 对员工下拉列表进行部分查看,将使用几次并用于@Html.Action("ListStaff", "Staff")调用它.然后动作方法有

    public ActionResult ListStaff()
    {
        IEnumerable<StaffMember> model = _serviceLayer.GetAllStaff();
        return PartialView(model);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    但是我不确定它如何与模型绑定一起工作,我的理解是它必须有正确的名称才能提交表单,我需要将名称传递给局部视图以放置元素我猜?

  2. 不要让它调用控制器来获取工作人员,而是创建一个包含我的Task和IEnumerable possibleStaff集合的ViewModel.可能会将此信息发送到局部视图.

  3. 一个Html助手?

  4. 编辑器可以以某种方式使用?

哪一个(或者更多)最好?以及如何进行模型绑定?

asp.net-mvc partial-views model-binding razor

5
推荐指数
1
解决办法
2万
查看次数