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

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -