[asp.net-mvc] Html.DropdownListFor 선택된 값이 설정되지 않음

Html.DropDownListFor의 선택된 값을 어떻게 설정할 수 있습니까? 온라인에서 살펴본 결과 아래와 같이 네 번째 매개 변수를 사용하여 달성 할 수 있음을 확인했습니다.

@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0),  "Please select a country")

내 선택 목록은 다음과 같이 표시됩니다.

<select id="ShipFromCountries" name="ShipFromCountries">
     <option value="">Please select a country</option>
     <option value="GB">United Kingdom</option>
     <option value="US">United States</option>
     ...
</select>

그러나 어떤 이유로 영국이 선택된 상태로 유지되지만 “국가를 선택하십시오”를 선택하고 싶습니다.

누구든지 내가 이것을 어떻게 할 수 있는지 알고 있습니까?

편집하다

기능에 약간의 변경이 있었지만 여전히이 문제가 발생하는 것처럼 보이기 때문에 코드를 업데이트했습니다. 이것이 내 견해입니다.

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

1option내가 원하는 이드의 선택, 나도 그 텍스트로 시도했지만 option작동하지 않습니다.

어떤 아이디어?



답변

코드에는 몇 가지 개념적 문제가 있습니다.

첫째 ,

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

DropDownListFor를 사용할 때 첫 번째 매개 변수는 양식을 제출 한 후 선택한 값이 저장되는 속성입니다. 따라서 귀하의 경우 SelectedOrderId다음과 같이 사용하려면 모델의 일부 또는 이와 유사한 것을 가져야합니다 .

@Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

둘째 ,

ViewBag를 사용하는 것 외에는 잘못된 것은 아니지만 더 나은 방법이 있습니다 (대신 ViewModel에 해당 정보를 넣음). SelectList를 보유하고있는 ViewBag 속성이 선택한 값 을 입력속성의 이름과 동일 합니다. 이를 방지하려면 항목 목록을 포함하는 속성의 이름을 지정할 때 다른 이름을 사용하십시오.

이 문제를 피하고 더 나은 MVC 코드를 작성하려면 내가 사용할 코드 :

뷰 모델 :

public class MyViewModel{
   public int SelectedOrderId {get; set;}
   public SelectList OrderTemplates {get; set;}

   // Other properties you need in your view
}

제어 장치:

public ActionResult MyAction(){
   var model = new MyViewModel();
   model.OrderTemplates = new SelectList(db.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1);
   //Other initialization code

   return View(model);
}

보기에서 :

@Html.DropDownListFor(n => n.SelectedOrderId, Model.OrderTemplates, "Please select an order template")


답변

나를 위해 일하지 않았으므로 이렇게 일했습니다.

제어 장치:

int selectedId = 1;

ViewBag.ItemsSelect = new SelectList(db.Items, "ItemId", "ItemName",selectedId);

전망:

@Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect)

JQuery :

$("document").ready(function () {
    $('#ItemId').val('@Model.ItemId');
});


답변

다음과 같은 객체를 전달할 때 :

new SelectList(Model, "Code", "Name", 0)

소스 ( Model) 및 키 ( "Code") 텍스트 ( "Name") 및 선택한 값 0. 속성 0에 대한 소스에 값 이 없을 수 Code있으므로 HTML 도우미는 첫 번째 요소를 선택하여 실제 selectedValue를이 컨트롤에 전달합니다.


답변

할당하기 전에 선택한 값을 잘라 냈는지 확인하십시오.

//모델

public class SelectType
{
    public string Text { get; set; }
    public string Value { get; set; }
}

//제어 장치

var types = new List<SelectType>();
types.Add(new SelectType() { Value =  0, Text = "Select a Type" });
types.Add(new SelectType() { Value =  1, Text = "Family Trust" });
types.Add(new SelectType() { Value =  2, Text = "Unit Trust"});
ViewBag.PartialTypes = types;

//전망

@Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" })


답변

뷰에 무엇이 있을지 알고 있다면 컨트롤러에서 기본값을 설정 한 다음 view / cshtml 파일에 설정할 수도 있습니다.
HTML 측에서 기본값을 설정할 필요가 없습니다.

컨트롤러 파일에서.

commission.TypeofCommission = 1;
return View(commission);

.cshtml 파일에서.

@Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--")


답변

수업을 잊어야합니다

선택 목록

컨트롤러 에서 이것을 사용하십시오 .

var customerTypes = new[]
{
    new SelectListItem(){Value = "all", Text= "All"},
    new SelectListItem(){Value = "business", Text= "Business"},
    new SelectListItem(){Value = "private", Text= "Private"},
};

값을 선택하십시오.

var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private");
if (selectedCustomerType != null)
    selectedCustomerType.Selected = true;

ViewData에 목록을 추가합니다.

ViewBag.CustomerTypes = customerTypes;

보기 에서 사용 :

@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)

자세한 정보 : http://www.asp.net/mvc/overview/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc


답변

컨트롤러 섹션 추가

  ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);

Html 섹션 추가

   @Html.DropDownList("Orders", null)

간단한 방법