I am trying to implement a MVC application that has a view, controller and view model in order to populate a dropdown list from a database and then use the data for the selected item in a [HttpPost]. Below is the data in each of the corresponding files:
MessageController.cs
public String send_url;
private msg_cmsEntities smse = new msg_cmsEntities();
public ActionResult Message_Send_Get()
{
var model = new MessageModel
{
MessagesList = smse.Messages
.Select(c => new SelectListItem
{
Value = c.message1,
Text = c.message1
})
};
return View(model);
}
[HttpPost]
public ActionResult Message_Send_Get(String code, String password, String from, String Message_List, MessageModel message_to_send)
{
//If the Model is valid (no errors) then go into this statement
if (ModelState.IsValid)
{
WebRequest wrGETURL;
//This is a string that points to the location of the Web Service
string web_service_location = "http://www.google.com?";
//This initates a new writeable instance of HttpValueCollection
NameValueCollection query_string = System.Web.HttpUtility.ParseQueryString(string.Empty);
//This builds up the query string that will be used for the redirect
query_string["code"] = code;
query_string["password"] = password;
query_string["from"] = from;
query_string["msg"] = Message_List;
//This concatinates the web_service_location (String) and query_string (String)
send_url = web_service_location + query_string.ToString();
Debug.WriteLine(send_url);
wrGETURL = WebRequest.Create(send_url);
}
var model = new MessageModel
{
MessagesList = smse.Messages
.Select(c => new SelectListItem
{
Value = c.message1,
Text = c.message1
})
};
return View(message_to_send);
}
Message_Send_Get.aspx(The View):
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Message_Send.Models.MessageModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Message_Send_Get
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Message_Send_Get</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.code) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.code) %>
<%: Html.ValidationMessageFor(model => model.code) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.password) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.password) %>
<%: Html.ValidationMessageFor(model => model.password) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.from) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.from) %>
<%: Html.ValidationMessageFor(model => model.from) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.message) %>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(model => model.message, Model.MessagesList)%>
<%: Html.ValidationMessageFor(model => model.message) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
MessageModels.cs
public class MessageModel
{
[Required(ErrorMessage = "You must enter a code for this service!!")]
[DataType(DataType.Text)]
[DisplayName("Code")]
public string code { get; set; }
[Required(ErrorMessage = "A password is required for the service!!")]
[DataType(DataType.Text)]
[DisplayName("Password")]
public string password { get; set; }
[Required(ErrorMessage = "You must enter the 'From' information!!")]
[DataType(DataType.Text)]
[DisplayName("Message From")]
public string sms_from { get; set; }
[Required]
[DisplayName("Send Message")]
public string message { get; set; }
public IEnumerable<SelectListItem> MessagesList { get; set; }
}
When using this I get the error in the title, can someone please help me with this?
Thanks
In your POST controller action you seem to be instantiating some model variable that you do nothing with it. You still
return View(message_to_send);and of course thismessage_to_sendvariable doesn’t have itsMessagesListproperty assigned. Also why are you repeating all action arguments when they are already present in your view model?Here’s how I would suggest you improve your code (I have put some Warnings as comments in the code):
Small remark: in your view you seem to be using some
fromproperty of your model:<%: Html.TextBoxFor(model => model.from) %>but such property doesn’t exist in the model you have shown. Maybe you meantsms_from.