Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
echo '<form action="parse-content-types.php" method="post">';
echo '<input type="hidden" id="returnto" name="returnto" value="manage-content-types.php">';
echo '<input type="hidden" id="action" name="action" value="add">';
include('form-content-types.php');
echo '<div class="row">';
echo '<div class="col_12 center alpha omega">';
echo '<input type="submit" class="button blue" value="Submit this Content Type">';
echo '</div>';
echo '</div>';
echo '</form>';
Это будет parse-content-types.php:
<?php
$level = '../../';
include($level.'core/ini/start.php');
$returnto = Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
[110] Это будет parse-content-types.php:
[111]POST['returnto'];
$action = Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
[110] Это будет parse-content-types.php:
[111]POST['action'];
$content_type_id = Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
[110] Это будет parse-content-types.php:
[111]POST['content_type_id'];
$content_type = Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
[110] Это будет parse-content-types.php:
[111]POST['content_type'];
$content_type_path = Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
[110] Это будет parse-content-types.php:
[111]POST['content_type_path'];
$content_type_desc = Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action
на страницу анализа.
[110] Это будет parse-content-types.php:
[111]POST['content_type_desc'];
if($action == 'add'){
$insertq = $db->prepare('INSERT INTO content_types (
content_type,
content_type_path,
content_type_desc
)
VALUES (?,?,?)');
$insertq->execute(array(
$content_type,
$content_type_path,
$content_type_desc
));
$msg = 's|The item: '.$content_type.' has been inserted into the Content Types Database Table.';
}
elseif($action == 'edit'){
$sql = 'update content_types set
content_type_id=:content_type_id,
content_type=:content_type,
content_type_path=:content_type_path,
content_type_desc=:content_type_desc
where content_type_id=:THEID';
$upd=$db->prepare($sql);
$upd->bindParam(':content_type_id',$content_type_id,PDO::PARAM_STR);
$upd->bindParam(':content_type',$content_type,PDO::PARAM_STR);
$upd->bindParam(':content_type_path',$content_type_path,PDO::PARAM_STR);
$upd->bindParam(':content_type_desc',$content_type_desc,PDO::PARAM_STR);
$upd->bindParam(':THEID',$content_type_id,PDO::PARAM_STR);
$upd->execute();
$msg = 's|The item: '.$content_type.' has been updated in the Content Types Database Table.';
}
echo '<Script language="javascript">window.location="'.$returnto.'?msg='.$msg.'"</script>';
?>
Вот один из моих тестов (xUnit + Moq) только для подобного случая (использующий URL. RouteUrl в контроллере)
Надеюсь, это поможет:
var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.SetupGet(x => x.ApplicationPath).Returns("/");
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/a", UriKind.Absolute));
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.Setup(x => x.ApplyAppPathModifier("/post1")).Returns("http://localhost/post1");
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
context.SetupGet(x => x.Response).Returns(response.Object);
var controller = new LinkbackController(dbF.Object);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);
Этот пост может быть полезен, если вы хотите издеваться над классом HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
Создание ответа @ eu-ge-ne, который мне очень помог:
У меня был ActionResult, который выполнял перенаправление, а также имел вызов UpdateModel с параметром FormCollection . Чтобы UpdateModel () заработал, мне пришлось добавить это в мою Mocked HttpRequestBase:
FormCollection collection = new FormCollection();
collection["KeyName"] = "KeyValue";
request.Setup(x => x.Form).Returns(collection);
request.Setup(x => x.QueryString).Returns(new NameValueCollection());
Чтобы проверить правильность перенаправленного URL, вы можете сделать следующее:
RedirectResult result = controller.ActionName(modelToSubmit, collection) as RedirectResult;
Assert.AreEqual("/Expected/URL", result.Url);