MVC의 컨트롤러에서 DropDownList SelectedValue를 가져오는 방법
데이터베이스에서 작성한 드롭다운 목록이 있습니다.이제 Controller에서 선택한 값을 조작해야 합니다.하지만 이해가 안 됩니다.내가 시도한 코드.
모델
public class MobileViewModel
{
public List<tbInsertMobile> MobileList;
public SelectList Vendor { get; set; }
}
컨트롤러
public ActionResult ShowAllMobileDetails()
{
MobileViewModel MV = new MobileViewModel();
MV.MobileList = db.Usp_InsertUpdateDelete(null, "", "", null, "", 4, MergeOption.AppendOnly).ToList();
MV.Vendor = new SelectList(db.Usp_VendorList(), "VendorId", "VendorName");
return View(MV);
}
[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV)
{
string strDDLValue = ""; // Here i need the dropdownlist value
return View(MV);
}
보다
<table>
<tr>
<td>Mobile Manufacured</td>
<td>@Html.DropDownList("ddlVendor", Model.Vendor, "Select Manufacurer") </td>
</tr>
<tr>
<td>
</td>
<td>
<input id="Submit1" type="submit" value="search" />
</td>
</tr>
</table>
첫 번째 접근 방식(요청 또는 양식 수집을 통해)
다있니습에서 읽을 수 .Request
용사를 Request.Form
은 당의드운이름은다입니다.ddlVendor
지나갑니다ddlVendor
Collection 양식을 입력하여 양식별로 게시된 값을 가져옵니다.
string strDDLValue = Request.Form["ddlVendor"].ToString();
또는 사용FormCollection
:
[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV,FormCollection form)
{
string strDDLValue = form["ddlVendor"].ToString();
return View(MV);
}
두 번째 접근 방식(모델을 통해):
모델 바인딩을 사용하려면 모델에 속성을 추가합니다.
public class MobileViewModel
{
public List<tbInsertMobile> MobileList;
public SelectList Vendor { get; set; }
public string SelectedVendor {get;set;}
}
및 보기:
@Html.DropDownListFor(m=>m.SelectedVendor , Model.Vendor, "Select Manufacurer")
실행 중:
[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV)
{
string SelectedValue = MV.SelectedVendor;
return View(MV);
}
업데이트:
선택한 항목의 텍스트도 게시하려면 숨김 필드를 추가하고 드롭다운 선택 시 선택한 항목 텍스트를 숨김 필드에 설정해야 합니다.
public class MobileViewModel
{
public List<tbInsertMobile> MobileList;
public SelectList Vendor { get; set; }
public string SelectVendor {get;set;}
public string SelectedvendorText { get; set; }
}
jquery를 사용하여 숨겨진 필드를 설정합니다.
<script type="text/javascript">
$(function(){
$("#SelectedVendor").on("change", function {
$("#SelectedvendorText").val($(this).text());
});
});
</script>
@Html.DropDownListFor(m=>m.SelectedVendor , Model.Vendor, "Select Manufacurer")
@Html.HiddenFor(m=>m.SelectedvendorText)
모델
성별 필드가 있는 매우 기본적인 모델입니다. GetGenderSelectItems()
DropDownList를 채우는 데 필요한 선택 항목을 반환합니다.
public enum Gender
{
Male, Female
}
public class MyModel
{
public Gender Gender { get; set; }
public static IEnumerable<SelectListItem> GetGenderSelectItems()
{
yield return new SelectListItem { Text = "Male", Value = "Male" };
yield return new SelectListItem { Text = "Female", Value = "Female" };
}
}
보다
포장했는지 확인해 주세요.@Html.DropDownListFor
서식표로
@model MyModel
@using (Html.BeginForm("MyController", "MyAction", FormMethod.Post)
{
@Html.DropDownListFor(m => m.Gender, MyModel.GetGenderSelectItems())
<input type="submit" value="Send" />
}
컨트롤러
.cshtml 레이저 뷰 이름은 컨트롤러 작업 이름과 동일해야 하며 폴더 이름은 컨트롤러 이름과 일치해야 합니다.Views\MyController\MyAction.cshtml
.
public class MyController : Controller
{
public ActionResult MyAction()
{
// shows your form when you load the page
return View();
}
[HttpPost]
public ActionResult MyAction(MyModel model)
{
// the value is received in the controller.
var selectedGender = model.Gender;
return View(model);
}
}
더 나아가기
이제 강력한 유형과 열거형을 독립적으로 만들어 보겠습니다.
var genderSelectItems = Enum.GetValues(typeof(Gender))
.Cast<string>()
.Select(genderString => new SelectListItem
{
Text = genderString,
Value = genderString,
}).AsEnumerable();
MVC 5/6/레이저 페이지
뷰백은 이미 너무 남용되고 있기 때문에 강력한 타입의 모델이 가장 좋은 방법이라고 생각합니다 :)
MVC 5 예
사용자의 Get Action
public async Task<ActionResult> Register()
{
var model = new RegistrationViewModel
{
Roles = GetRoles()
};
return View(model);
}
사용자 뷰 모델
public class RegistrationViewModel
{
public string Name { get; set; }
public int? RoleId { get; set; }
public List<SelectListItem> Roles { get; set; }
}
사용자 보기
<div class="form-group">
@Html.LabelFor(model => model.RoleId, htmlAttributes: new { @class = "col-form-label" })
<div class="col-form-txt">
@Html.DropDownListFor(model => model.RoleId, Model.Roles, "--Select Role--", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.RoleId, "", new { @class = "text-danger" })
</div>
</div>
사용자의 사후 조치
[HttpPost, ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegistrationViewModel model)
{
if (ModelState.IsValid)
{
var _roleId = model.RoleId,
MVC 6 조금 다를 거예요.
작업 가져오기
public async Task<ActionResult> Register()
{
var _roles = new List<SelectListItem>();
_roles.Add(new SelectListItem
{
Text = "Select",
Value = ""
});
foreach (var role in GetRoles())
{
_roles.Add(new SelectListItem
{
Text = z.Name,
Value = z.Id
});
}
var model = new RegistrationViewModel
{
Roles = _roles
};
return View(model);
}
View 모델은 MVC 5와 동일합니다.
당신의 견해는 다음과 같습니다.
<select asp-for="RoleId" asp-items="Model.Roles"></select>
게시물도 동일합니다.
레이저 페이지
페이지 모델
[BindProperty]
public int User User { get; set; } = 1;
public List<SelectListItem> Roles { get; set; }
public void OnGet()
{
Roles = new List<SelectListItem> {
new SelectListItem { Value = "1", Text = "X" },
new SelectListItem { Value = "2", Text = "Y" },
new SelectListItem { Value = "3", Text = "Z" },
};
}
<select asp-for="User" asp-items="Model.Roles">
<option value="">Select Role</option>
</select>
누군가에게 도움이 되길 바랍니다 :)
당신이 경우용을 사용하고 .@Html.DropDownList
팔로우.
컨트롤러:
var categoryList = context.Categories.Select(c => c.CategoryName).ToList();
ViewBag.CategoryList = categoryList;
보기:
@Html.DropDownList("Category", new SelectList(ViewBag.CategoryList), "Choose Category", new { @class = "form-control" })
$("#Category").on("change", function () {
var q = $("#Category").val();
console.log("val = " + q);
});
당신이 가벼운 것을 찾는다면, 당신의 행동에 매개변수를 추가하겠습니다.
[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV, string ddlVendor)
{
string strDDLValue = ddlVendor; // Of course, this becomes silly.
return View(MV);
}
있는첫 를 현재코는발 "ddlVendor"로 입니다.Html.DropDownList
그리고 그것은 MVC 프레임워크에게 다음과 같은 것을 만들라고.<select>
원소name
"ddlVendor"는 다음과 같습니다사용자가 양식을 클라이언트 측에 제출하면 해당 키에 대한 값이 포함됩니다.
가 을 MVC로 분석하려고 할 때 " " " " " " "MV
그것은 찾을 것입니다.MobileList
그리고.Vendor
둘 다 찾지 못해서 채워지지 않을 겁니다이 매개 변수를 추가하거나 사용하여FormCollection
다른 답변에서 제안한 것처럼 MVC가 해당 이름의 양식 요소를 구체적으로 검색하여 매개 변수 값을 게시된 값으로 채울 것을 요청하는 것입니다.
SelectList를 사용하여 @HtmlDropdownListFor를 바인딩하고 여기에 selectedValue 매개 변수를 지정합니다.
http://msdn.microsoft.com/en-us/library/dd492553(v=vs.108).aspx
예: 벤더 ID를 얻기 위해 이렇게 할 수 있습니다.
@Html.DropDownListFor(m => m.VendorId,Model.Vendor)
public class MobileViewModel
{
public List<tbInsertMobile> MobileList;
public SelectList Vendor { get; set; }
public int VenderID{get;set;}
}
[HttpPost]
public ActionResult Action(MobileViewModel model)
{
var Id = model.VenderID;
저는 ASP에서도 같은 문제를 겪고 있었습니다.NET 면도기 C#
나는.ComboBox
의 직함으로 가득 찬.EventMessage
그리고 선택한 값으로 이 메시지의 내용을 표시하여 레이블 또는TextField
기타Control
...
나의ComboBox
다음과 같이 채워졌습니다.
@Html.DropDownList("EventBerichten", new SelectList(ViewBag.EventBerichten, "EventBerichtenID", "Titel"), new { @class = "form-control", onchange = "$(this.form).submit();" })
내 안에서EventController
페이지로 이동할 수 있는 기능이 있었는데, 거기서 나는 나의 것을 보여주고 싶었습니다.ComboBox
(모델 유형이 다르기 때문에 부분 뷰를 사용해야 했습니다.)
부분 보기를 로드할 인덱스에서 페이지로 가져오는 기능:
public ActionResult EventDetail(int id)
{
Event eventOrg = db.Event.Include(s => s.Files).SingleOrDefault(s => s.EventID == id);
// EventOrg eventOrg = db.EventOrgs.Find(id);
if (eventOrg == null)
{
return HttpNotFound();
}
ViewBag.EventBerichten = GetEventBerichtenLijst(id);
ViewBag.eventOrg = eventOrg;
return View(eventOrg);
}
부분 보기 기능은 다음과 같습니다.
public PartialViewResult InhoudByIdPartial(int id)
{
return PartialView(
db.EventBericht.Where(r => r.EventID == id).ToList());
}
EventBerichten을 채우는 기능:
public List<EventBerichten> GetEventBerichtenLijst(int id)
{
var eventLijst = db.EventBericht.ToList();
var berLijst = new List<EventBerichten>();
foreach (var ber in eventLijst)
{
if (ber.EventID == id )
{
berLijst.Add(ber);
}
}
return berLijst;
}
부분 뷰 모델은 다음과 같습니다.
@model IEnumerable<STUVF_back_end.Models.EventBerichten>
<table>
<tr>
<th>
EventID
</th>
<th>
Titel
</th>
<th>
Inhoud
</th>
<th>
BerichtDatum
</th>
<th>
BerichtTijd
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.EventID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Titel)
</td>
<td>
@Html.DisplayFor(modelItem => item.Inhoud)
</td>
<td>
@Html.DisplayFor(modelItem => item.BerichtDatum)
</td>
<td>
@Html.DisplayFor(modelItem => item.BerichtTijd)
</td>
</tr>
}
</table>
VIEUW: 이 스크립트는 뷰에서 내 출력을 가져오는 데 사용됩니다.
<script type="text/javascript">
$(document).ready(function () {
$("#EventBerichten").change(function () {
$("#log").ajaxError(function (event, jqxhr, settings, exception) {
alert(exception);
});
var BerichtSelected = $("select option:selected").first().text();
$.get('@Url.Action("InhoudByIdPartial")',
{ EventBerichtID: BerichtSelected }, function (data) {
$("#target").html(data);
});
});
});
</script>
@{
Html.RenderAction("InhoudByIdPartial", Model.EventID);
}
<fieldset>
<legend>Berichten over dit Evenement</legend>
<div>
@Html.DropDownList("EventBerichten", new SelectList(ViewBag.EventBerichten, "EventBerichtenID", "Titel"), new { @class = "form-control", onchange = "$(this.form).submit();" })
</div>
<br />
<div id="target">
</div>
<div id="log">
</div>
</fieldset>
감사합니다. 이것은 제가 가진 문제를 더 잘 이해하고 해결하는 데 도움이 되었습니다.선택한 텍스트를 가져오기 위해 제공된 JQuery아이템이 작동하지 않았습니다.
$(function () {
$("#SelectedVender").on("change", function () {
$("#SelectedvendorText").val($(**"#SelectedVender option:selected"**).text());
});
});
간단한 해결책은 이것이 제안되었는지 여부를 확신할 수 없습니다.또한 일부 경우에는 작동하지 않을 수도 있습니다.이것이 아래의 간단한 해결책이라고 합니다.
new SelectListItem { Value = "1", Text = "Waiting Invoices", Selected = true}
List<SelectListItem> InvoiceStatusDD = new List<SelectListItem>();
InvoiceStatusDD.Add(new SelectListItem { Value = "0", Text = "All Invoices" });
InvoiceStatusDD.Add(new SelectListItem { Value = "1", Text = "Waiting Invoices", Selected = true});
InvoiceStatusDD.Add(new SelectListItem { Value = "7", Text = "Client Approved Invoices" });
@Html.DropDownList("InvoiceStatus", InvoiceStatusDD)
데이터베이스 기반 선택 목록에 대해서도 이와 같은 작업을 수행할 수 있습니다.컨트롤러에서 선택한 항목을 설정해야 합니다.
@Html.DropDownList("ApprovalProfile", (IEnumerable<SelectListItem>)ViewData["ApprovalProfiles"], "All Employees")
이와 유사하지만 더 나은 솔루션이 존재합니다. 이것은 하나의 방법일 뿐입니다.
foreach (CountryModel item in CountryModel.GetCountryList())
{
if (item.CountryPhoneCode.Trim() != "974")
{
countries.Add(new SelectListItem { Text = item.CountryName + " +(" + item.CountryPhoneCode + ")", Value = item.CountryPhoneCode });
}
else {
countries.Add(new SelectListItem { Text = item.CountryName + " +(" + item.CountryPhoneCode + ")", Value = item.CountryPhoneCode,Selected=true });
}
}
언급URL : https://stackoverflow.com/questions/27901175/how-to-get-dropdownlist-selectedvalue-in-controller-in-mvc
'programing' 카테고리의 다른 글
TS2611: 'foo'는 클래스 'A'에서 속성으로 정의되지만 여기서 'B'에서는 액세스로 재정의됩니다. (0) | 2023.06.14 |
---|---|
Woocommerce - 국가별 제품 가격 (0) | 2023.06.14 |
파이썬에서 순환 가져오기를 방지하는 방법은 무엇입니까? (0) | 2023.06.14 |
Visual Studio 프로젝트에서 유형 스크립트 지원을 제거하는 방법은 무엇입니까? (0) | 2023.06.14 |
중첩된 반복기의 헤더 템플릿에서 상위 데이터 액세스 (0) | 2023.06.14 |