텍스트 필드에서 여러 열을 결합하는 MVC 선택 목록
텍스트 필드가 두 개 이상의 텍스트 열로 구성된 선택 목록을 생성하는 방법은 무엇입니까? 예: 데이터베이스에 설명 및 비율 필드가 있는 경우, 이를 결합하여 다음을 표시합니다.
Large--£200
Medium--£150
Small--£100
컨트롤러 코드:
var stands = db.Stands.Where(s => s.ExhibitorID == null).ToList();
ViewBag.StandID = new SelectList(stands,"StandID", "Description" + "-- £" + "Rate");
...그리고 제 견해는 (현재):
<div class="editor-field">
@Html.DropDownList("StandID", "--Select--")
</div>
...하지만 "설명" + "--파운드" + "요금";이(가) 실행되지 않습니다.
데이터 바인딩: '시스템'.데이터. 엔티티.동적 프록시.스탠드_63F8C9F623B3C0E57D3008A57081AFCD9C39E1A6B79B0380B60840F1EFAE9DB4'에 'Description--£Rate' 이름의 속성이 없습니다.
도움을 주셔서 감사합니다.
마크.
간단한 LINQ 투영을 사용하여 새 익명 클래스를 만든 다음SelectList(IEnumerable, string, string)
생성자 오버로드 - 사용할 값 및 텍스트 필드를 지정합니다.<option>
요소(예:
var stands =
db.Stands
.Where(s => s.ExhibitorID == null)
.Select(s => new
{
StandID = s.StandID,
Description = string.Format("{0}-- £{1}", s.Description, s.Rate)
})
.ToList();
ViewBag.StandID = new SelectList(stands, "StandID", "Description")
편집
C#6 이상에서 문자열 보간은 다음보다 더 나은 읽기를 만듭니다.string.Format
...
Description = $"{s.Description}-- £{s.Rate}"
만약 당신이 강한 사람에게 투사됩니다.ViewModel
클래스 이름(익명 클래스 대신)은 의심할 여지 없이 마법 문자열을 운영자의 안전으로 교체하고 싶을 것입니다.
ViewBag.StandID = new SelectList(stands, nameof(Stand.StandID), nameof(Stand.Description));
var stands = db.Stands.Where(s => s.ExhibitorID == null).ToList();
IEnumerable<SelectListItem> selectList = from s in stands
select new SelectListItem
{
Value = s.StandID,
Text = s.Description + "-- £" + s.Rate.ToString()
};
ViewBag.StandID = new SelectList(selectList, "Value", "Text");
부분 모형 클래스를 만들 수 있습니다.
public partial class Stand
{
public string DisplayName
{
get
{
return this.Description + "-- £" + this.Rate.ToString();
}
}
}
그러면 사용자가 보기에
var stands = db.Stands.Where(s => s.ExhibitorID == null).ToList();
ViewBag.StandID = new SelectList(stands,"StandID", "DisplayName");
사용 중인 생성자의 형식은 SelectList(IEnumberable 항목, string dataValueField, string dataTextField)입니다.
따라서 현재의 방식으로 사용할 경우 실제로 "Description -- £Rate"라는 TextField에 바인딩하도록 지시합니다. 이 필드의 이름이 DB에서 들어오는 것이 아니라면 사용자가 무엇을 의미하는지 알 수 없습니다.
위에서 설명한 두 가지 방법 중 하나는 사용자가 dataValueField에 입력한 값이 Value에 입력한 속성의 이름과 일치하고 dataTextField가 텍스트를 입력한 위치의 속성 이름과 일치하는 한 작동합니다. 아마도 위의 두 솔루션이 혼합된 것입니다. (단, linq보다 람다 식을 선호하기 때문입니다.)선택 목록 항목을 사용하면 변환 후 컬렉션에서 ToList를 수행할 필요가 없습니다.선택 목록에 자연스럽게 바인딩되는 개체를 실제로 만들고 있습니다.
목록에 넣기 전에 설명 또는 비율을 확인하여 비어 있지 않은지 확인할 수도 있습니다.
var stands = db.Stands.Where(s => s.ExhibitorID == null)
.Select(s => new SelectListItem
{
Value = s.StandID.ToString(),
Text = s.Description + "-- £" + s.Rate.ToString()
});
ViewBag.StandID = new SelectList(stands, "Value", "Text");
View Model을 수정하여 이 작업을 수행했습니다. 코드는 다음과 같습니다.
뷰 모델
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MvcEsosNew.Models;
using System.Web.Mvc;
namespace MvcEsosNew.ViewModels
{
public class EntitlementViewModel
{
public int EntitlementCount { get; set; }
public Entitlement Entitlement { get; set; }
public SelectList Member { get; set; }
public SelectList Job_Grade { get; set; }
public SelectList Department { get; set; }
public SelectList Esos_Batch { get; set; }
}
public class department_FullName
{
public int deptID { get; set; }
public string deptCode { get; set; }
public string deptName { get; set; }
public string fullName { get { return deptCode + " - " + deptName; } }
}
}
컨트롤러
public void getAllDepartment(EntitlementViewModel entitlementVM)
{
var department = from Department in db.Departments.Where(D => D.Status == "ACTIVE").ToList()
select new department_FullName
{
deptID = Department.id,
deptCode = Department.department_code,
deptName = Department.department_name
};
entitlementVM.Department = new SelectList(department, "deptID", "fullName");
}
더 뷰
<div class="form-group row">
<div class="col-sm-2">
@Html.LabelFor(model => model.Entitlement.department_id)
</div>
<div class="col-sm-10">
@Html.DropDownListFor(model => model.Entitlement.department_id, Model.Department, new { @class="form-control" })
@Html.ValidationMessageFor(model => model.Entitlement.department_id)
</div>
</div>
결과:
언급URL : https://stackoverflow.com/questions/12727285/mvc-selectlist-combining-multiple-columns-in-text-field
'programing' 카테고리의 다른 글
Java JDBC - tnsnames.ora를 사용하여 Oracle에 연결하는 방법 (0) | 2023.06.18 |
---|---|
Intents를 사용하여 한 Android 활동에서 다른 활동으로 개체를 보내는 방법은 무엇입니까? (0) | 2023.06.18 |
R 벡터의 모든 요소에서 마지막 n자를 제거하는 방법 (0) | 2023.06.18 |
R에서 Excel 해결사를 복제하는 방법 (0) | 2023.06.18 |
요청["키"] 대 요청.Params["키"] 대 Request.쿼리 문자열["키"] (0) | 2023.06.18 |