Reputation: 375
I'm trying to pass this selected radio button value from the razor view to the controller.... can someone please give me an idea how to do this?..................... My View looks like this:
@using (Html.BeginForm("Index", "Exam"))
{
@Html.Hidden("qid", Model.ID, new { @id = "id" })
<table>
<tr>
<td>
@Model.ID
</td>
<td>
@Model.QuestionDes
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer1", new { @id = 1 }) @Model.Answer1 </p>
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer2", new { @id = 2 }) @Model.Answer2 </p>
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer3", new { @id = 3 }) @Model.Answer3 </p>
</td>
</tr>
<tr>
<td>
<p>@Html.RadioButton("Answer4", new { @id = 4 }) @Model.Answer4 </p>
</td>
</tr>
</table>
<input type="submit" value="Next" />
}
@using (Html.BeginForm("PrevIndex", "Exam"))
{
@Html.Hidden("qid1", Model.ID, new { @id = "id1" })
<input value="Prev" type="submit" />
}
My Controller looks like this:.........
public class ExamController : Controller
{
[HttpGet]
public ActionResult Index()
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(1);
return View(q);
}
[HttpPost]
public ActionResult Index(QuestionLoadDTO ques)
{
int count = 0;
count = int.Parse(Request["qid"].ToString());
count++;
if (count <= 4)
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(count);
return View(q);
}
return RedirectToAction("Submit");
}
public ActionResult PrevIndex(QuestionLoadDTO ques)
{
int count1 = 0;
count1 = int.Parse(Request["qid1"].ToString());
count1--;
if (count1 < 5 || count1 >= 0)
{
IQuestionService ser = new QuestionService();
QuestionLoadDTO q = ser.GetIndividualQuestions(count1);
return View("Index", q);
}
return RedirectToAction("End");
}
public ActionResult Submit()
{
return View();
}
public ActionResult End()
{
return View();
}
}
These are the other methods:
QuestionLoadDTO IQuestionService.GetIndividualQuestions(int index)
{
IQuestionData ser = new QuestionRepository();
QuestionLoadDTO q = ser.GetIndividualQues(index);
return q;
}
public QuestionLoadDTO GetIndividualQues(int index)
{
Context con = new Context();
Question question = con.Questions.Find(index);//Where(e => e.ID == index).FirstOrDefault();
QuestionLoadDTO dto = new QuestionLoadDTO()
{
ID = question.ID,
QuestionDes = question.QuestionDes,
Answer1 = question.Answer1,
Answer2 = question.Answer2,
Answer3 = question.Answer3,
Answer4 = question.Answer4
};
return dto;
}
Thank you!!!!
Upvotes: 12
Views: 92182
Reputation: 1513
Add the following source code to View:
@Html.RadioButtonFor(m => m.Role, "1" ) <span>A</span>
@Html.RadioButtonFor(m => m.Role, "0" ) <span>B</span>
@Html.HiddenFor(m=>m.Role)
You can put the selected value to this HiddenField: @Html.HiddenFor(m=>m.Role)
and send it to controller via [HttpPost] prototype.
Upvotes: 2
Reputation: 41
I saw this on another thread and it work like a champ.
Razor view like this:
@using (Html.BeginForm("test", "testcontroller"))
{
@Html.RadioButton("CashPayment", "1")<span>Yes</span>
@Html.RadioButton("CashPayment", "0")<span>No</span>
}
And Controller like this:
public ActionResult test(string CashPayment)
{
//your code
}
Upvotes: 3
Reputation: 567
Add property:
public string SelectedAnswer { get; set; }
Add in view:
@Html.RadioButtonFor(m => m.SelectedAnswer, "Answer1")
@Html.RadioButtonFor(m => m.SelectedAnswer, "Answer2")
@Html.RadioButtonFor(m => m.SelectedAnswer, "Answer3")
@Html.RadioButtonFor(m => m.SelectedAnswer, "Answer4")
In controller it postback the value according to selected radio button... i.e. either Answer1, or Answer2, etc.
Upvotes: 21
Reputation: 31
Use form collection
[HttpPost]
public ActionResult Index(FormCollection fc)
{
string answerA = fc["Answer1"];
string answerB = fc["Answer2"];
string answerC = fc["Answer3"];
string answerD = fc["Answer4"];
return View();
}
Upvotes: 3
Reputation: 3881
If you are giving same name for your radio buttons, then you can try the following code
Controller
[HttpPost]
public ActionResult Index(string Answer)
{
return View();
}
View
@using (Html.BeginForm("Index", "Demo"))
{
@Html.RadioButton("Answer", "A") <span>A</span>
@Html.RadioButton("Answer", "B") <span>B</span>
<input type="submit" value="Next" />
}
Upvotes: 8
Reputation: 14604
Either make a hidden field for every radio button or change you radio buttons like this
@Html.RadioButtonFor("Answer1", new { @id = 1 })
Upvotes: 3