Mohamed Naguib
Mohamed Naguib

Reputation: 1730

MVC Controller doesn't control the view

I have a button called in my view like this one

<form>
    <div class="field">
        <label for="product-name">Product Name</label><br />
        @Html.TextBoxFor(x=> x.Name, new {id="product-name",required="required"}) <br />
        <span class="helper">Give your product a name.</span>
        @ViewBag.mm
    </div>
    <div class="field">
        <label for="product-variety">Product Variety</label><br />
        <input id="product-variety" type="text" /><br />
        <span class="helper">Optionally, give your product a variety.</span>
    </div>
    <div class="field">
        <label for="product-description">Description</label><br />
        <input id="product-description" type="text" /><br />
        <span class="helper">Add an optional description to help identify your product.</span>
    </div>
    <div class="field">
        <label for="product-comments">Comments</label><br />
        <textarea id="product-comments"></textarea><br />
        <span class="helper">Add any further information or comments relating to this product.</span>
    </div>
    <input id="product-save-return" type="submit" value="Add Product and Return to Products" class="green-button" /> <input id="product-save-associate" type="button" value="Add Product and Associate with Sites" class="green-button" /> <input id="file-cancel" type="button" value="Cancel" class="green-button" />

and in the controller I have a function like this

[HttpPost]
public ActionResult Add(Product product)
{
    SupplierContext db = new SupplierContext();
    Response.Write("Inside");
    ViewBag.mm = "xyz";
    if (ModelState.IsValid)
    {
        product.Key = Guid.NewGuid();
        product.Type = ProductType.Chemical;
        product.Status = EntityStatus.Default;
        db.Products.Add(product);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(product);
}

but when i click the button, the function in the controller doesn't work.

Upvotes: 0

Views: 127

Answers (2)

Danny Brady
Danny Brady

Reputation: 1935

Is your button within a form/action? In Razor it would simply just be a case of adding your form elements within the following syntax:

@using (Html.BeginForm())
{
    <div class="field">
        <label for="product-name">Product Name</label><br />
        @Html.TextBoxFor(x=> x.Name, new {id="product-name",required="required"}) <br />
        <span class="helper">Give your product a name.</span>
        @ViewBag.mm
    </div>
    <div class="field">
        <label for="product-variety">Product Variety</label><br />
        <input id="product-variety" type="text" /><br />
        <span class="helper">Optionally, give your product a variety.</span>
    </div>
    <div class="field">
        <label for="product-description">Description</label><br />
        <input id="product-description" type="text" /><br />
        <span class="helper">Add an optional description to help identify your product.</span>
    </div>
    <div class="field">
        <label for="product-comments">Comments</label><br />
        <textarea id="product-comments"></textarea><br />
        <span class="helper">Add any further information or comments relating to this product.</span>
    </div>
    <input id="product-save-associate" type="button" value="Add Product and Associate with Sites" class="green-button" />  <input id="file-cancel" type="button" value="Cancel" class="green-button" />
   <input id="product-save-return" type="submit" value="Add Product and Return to Products" class="green-button" />
}

This could be why it is not picking up the function in the controller. You could do this in javscript too with an AJAX post...

Upvotes: 1

Mark
Mark

Reputation: 2432

You can also use an ActionLink:

@Html.ActionLink("Add Product and Return to Products", "Add", "YourController")

Though this will be a link instead of a button.

Upvotes: 0

Related Questions