c# - Passing enum value to controller. from model? -
in controller ggender says cannot implicitly convert type 'string', please advice.
my model:
public class staffregistrationviewmodel : ivalidatableobject { [required(errormessage = "please select gender.")] public gender? ggender { get; set; } //= null; public enum gender { [display(name = "male", order = 0)] male = 0, [display(name = "female", order = 1)] female = 1 }
my view:
<div class="row"> <div class="col-md-6"> <!--<i class="fa fa-child" aria-hidden="true"></i>--> @html.labelfor(model => model.ggender, "choose gender:", new { @style = "", @class = "", id = "" }) <span style="color: red;">*</span> @*@html.dropdownlistfor(model => model.profession, new selectlist(model.professions, "id", "name"), new { placeholder = "", @style = "", @class = "form-control", id = "profession" })*@ @html.enumdropdownlistfor(model => model.ggender, "please select", new { @class = "form-control" }) @html.validationmessagefor(model => model.ggender) </div>
controller:
staffregistrationviewmodel staffregistrationviewmodel = new staffregistrationviewmodel(); staffregistrationviewmodel.ggender = httpcontext.request.form["ggender"].tostring(); //cannot implicitly convert type 'string'
you can declare string variable hold request.form
content & use in switch statement instead of directly assigning string value enum variable:
string gender = httpcontext.request.form["ggender"].tostring(); switch (gender) { case "male": staffregistrationviewmodel.ggender = gender.male; break; case "female": staffregistrationviewmodel.ggender = gender.female; break; // can default null value nullable enum properties if want default: staffregistrationviewmodel.ggender = null; break; }
note httpcontext.request.form
stores submitted values string, if want return enum values directly use viewmodel name in controller action method pass submitted value (and use model directive in view page e.g. @model staffregistrationviewmodel
):
[httppost] public actionresult staffregistration(staffregistrationviewmodel model) { // other logic here // enum assignment example gender? gender = model.ggender; // other logic here return view(model); }
nb: can write custom model binder enums binding dropdownlistfor
, given in reference: how 1 perform asp.net mvc 4 model binding enums?.
Comments
Post a Comment